Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1587841

Re: [PATCH 4.4 17/25] USB: serial: digi_acceleport: fix OOB data sanity check

From Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Newsgroups linux.kernel
Subject Re: [PATCH 4.4 17/25] USB: serial: digi_acceleport: fix OOB data sanity check
Date 2017-02-24 19:00 +0100
Message-ID <tesjT-3yY-7@gated-at.bofh.it> (permalink)
References <tejqh-5Sb-3@gated-at.bofh.it> <tejqh-5Sb-9@gated-at.bofh.it> <teogi-MF-25@gated-at.bofh.it> <tes0y-3rI-15@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Fri, Feb 24, 2017 at 06:33:04PM +0100, Johan Hovold wrote:
> On Fri, Feb 24, 2017 at 01:38:25PM +0000, Ben Hutchings wrote: > On Fri, 2017-02-24 at 09:25 +0100, Greg Kroah-Hartman wrote:
> > > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > > 
> > > ------------------
> > > 
> > > From: Johan Hovold <johan@kernel.org>
> > > 
> > > commit 2d380889215fe20b8523345649dee0579821800c upstream.
> > > 
> > > Make sure to check for short transfers to avoid underflow in a loop
> > > condition when parsing the receive buffer.
> > > 
> > > Also fix an off-by-one error in the incomplete sanity check which could
> > > lead to invalid data being parsed.
> > 
> > This appears to *introduce* an off-by-one.  Which is not as serious as
> > the underflow, but is still a regression.
> > 
> > Suppose we have urb->actual_length == 4:
> > 
> > [...]
> > > -	for (i = 0; i < urb->actual_length - 3;) {
> > 
> > i < 1 is true, so we would run the loop once.
> > 
> > > -		opcode = ((unsigned char *)urb->transfer_buffer)[i++];
> > > -		line = ((unsigned char *)urb->transfer_buffer)[i++];
> > > -		status = ((unsigned char *)urb->transfer_buffer)[i++];
> > > -		val = ((unsigned char *)urb->transfer_buffer)[i++];
> > > +	for (i = 0; i < urb->actual_length - 4; i += 4) {
> > 
> > i < 0 is false, so we now skip the loop.
> 
> Good catch, thanks! The original loop condition was indeed correct
> (modulo the missing underflow check), and I'll post a follow-up fix to
> address this.
> 
> > > +		opcode = buf[i];
> > > +		line = buf[i + 1];
> > > +		status = buf[i + 2];
> > > +		val = buf[i + 3];
> 
> You should probably not apply this one until after the follow-up is in
> Linus' tree as this patch breaks TIOCMGET.

Ok, I'll drop this one from the stable tree now.  Remind me to pick this
one up when the fixup hits Linus's tree.

thanks,

greg k-h

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 4.4 17/25] USB: serial: digi_acceleport: fix OOB data sanity check Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-02-24 09:30 +0100
  Re: [PATCH 4.4 17/25] USB: serial: digi_acceleport: fix OOB data  sanity check Ben Hutchings <ben@decadent.org.uk> - 2017-02-24 14:40 +0100
    Re: [PATCH 4.4 17/25] USB: serial: digi_acceleport: fix OOB data  sanity check Johan Hovold <johan@kernel.org> - 2017-02-24 18:40 +0100
      Re: [PATCH 4.4 17/25] USB: serial: digi_acceleport: fix OOB data  sanity check Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-02-24 19:00 +0100
        Re: [PATCH 4.4 17/25] USB: serial: digi_acceleport: fix OOB data  sanity check Johan Hovold <johan@kernel.org> - 2017-02-24 19:20 +0100

csiph-web