RE: [PATCH rdma-rc] RDMA/iwcm: Don't copy past the end of dev_name() string

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> > > On Thu, Dec 20, 2018 at 11:37:54AM -0800, Steve Wise wrote:
> > > > We now use dev_name(&ib_device->dev) instead of ib_device->name
> in
> > > > iwpm messages.  The name field in struct device is a const char *,
> > > > where as ib_device->name is a char array of size
> IB_DEVICE_NAME_MAX,
> > > > and it is pre-initialized to zeros.
> > > >
> > > > Since iw_cm_map() was using memcpy() to copy in the device name,
> and
> > > > copying IWPM_DEVNAME_SIZE bytes, it ends up copying past the device
> > > > name string and getting random bytes.  This results in iwpmd failing
> > > > the REGISTER_PID request from iwcm.  Thus port mapping is broken.
> > > >
> > > > The fix is to initialize the iwpm_dev_data message memory to zeros,
> > > > and then strcopy() to avoid copying past the end of the dev_name()
> > string.
> > >
> > > The fix is to return failure if the name is too long to be held
> > > in the iwpm_dev_data...
> >
> > That would not fix the original memcpy() copying past the end of the
struct
> > device name.   It wasn't overflowing the iwpm_dev_data, it was copying
> past
> > the end of the device string and copying garbage.
> 
> Well, you'd use a sensible strncpy and fail if the source string is
> too long. Handling strings with memcpy is always wrong.

That's fine.  I just wanted to make sure you were understanding the failure
mode.  Your initial comment led me to believe you misread the patch.

> 
> Sending a truncated string to userspace is garbage..
>

Agreed.
 
> > However, if this is to make 4.20-rc, then I recommend we do my proposed
> > change.  Is it too late for 4.20?
> 
> Yes

Too bad.  I'll fix it up and resubmit for for-next with a stable tag.

Thanks,

Steve.




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux