mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-02 17:49:03 +02:00 
			
		
		
		
	sparc64: viohs: Remove VLA usage
In the quest to remove all stack VLA usage from the kernel[1], this allocates a fixed size array for the maximum number of cookies and adds a runtime sanity check. [1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1 RqZWA@mail.gmail.com Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									df58f37b5d
								
							
						
					
					
						commit
						31a43fa794
					
				
					 1 changed files with 9 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -180,11 +180,17 @@ static int send_dreg(struct vio_driver_state *vio)
 | 
			
		|||
		struct vio_dring_register pkt;
 | 
			
		||||
		char all[sizeof(struct vio_dring_register) +
 | 
			
		||||
			 (sizeof(struct ldc_trans_cookie) *
 | 
			
		||||
			  dr->ncookies)];
 | 
			
		||||
			  VIO_MAX_RING_COOKIES)];
 | 
			
		||||
	} u;
 | 
			
		||||
	size_t bytes = sizeof(struct vio_dring_register) +
 | 
			
		||||
		       (sizeof(struct ldc_trans_cookie) *
 | 
			
		||||
			dr->ncookies);
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	memset(&u, 0, sizeof(u));
 | 
			
		||||
	if (WARN_ON(bytes > sizeof(u)))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	memset(&u, 0, bytes);
 | 
			
		||||
	init_tag(&u.pkt.tag, VIO_TYPE_CTRL, VIO_SUBTYPE_INFO, VIO_DRING_REG);
 | 
			
		||||
	u.pkt.dring_ident = 0;
 | 
			
		||||
	u.pkt.num_descr = dr->num_entries;
 | 
			
		||||
| 
						 | 
				
			
			@ -206,7 +212,7 @@ static int send_dreg(struct vio_driver_state *vio)
 | 
			
		|||
		       (unsigned long long) u.pkt.cookies[i].cookie_size);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return send_ctrl(vio, &u.pkt.tag, sizeof(u));
 | 
			
		||||
	return send_ctrl(vio, &u.pkt.tag, bytes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int send_rdx(struct vio_driver_state *vio)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue