On Mar 02 Dan Carpenter wrote: > In TCODE_STREAM_DATA mode, on 32bit systems, the "sizeof(*e) + > request->length" operation can overflow leading to memory corruption. > > Fixes: 18e9b10fcdc0 ("firewire: cdev: add closure to async stream ioctl") > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > --- > drivers/firewire/core-cdev.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c > index fb6c651214f3..314de0384035 100644 > --- a/drivers/firewire/core-cdev.c > +++ b/drivers/firewire/core-cdev.c > @@ -587,6 +587,9 @@ static int init_request(struct client *client, > request->length < 4) > return -EINVAL; > > + if (request->length > ULONG_MAX - sizeof(*e)) > + return -EINVAL; > + > e = kmalloc(sizeof(*e) + request->length, GFP_KERNEL); > if (e == NULL) > return -ENOMEM; There is already a length check for asynchronous stream requests. It happens in ioctl_send_stream_packet(). -- Stefan Richter -======--=-= --== ---=- http://arcgraph.de/sr/