USB: make usb_buffer_map_sg consistent with doc
PATCH 1/1 USB: make usb_buffer_map_sg consistent with doc
usb_buffer_map_sg should return negative on error according to its documentation. But dma_map_sg returns 0 on error. Take this into account and return -ENOMEM in such situation.
While at it, return -EINVAL instead of -1 when wrong input is passed in.
If this wasn't done, usb_sg_* operations used after usb_sg_init which returned 0 may cause oopses/deadlocks since we don't init structures/entries, esp. completion and status entry.
Signed-off-by Jiri Slaby <[email protected]>
Cc Greg Kroah-Hartman <[email protected]>
--- drivers/usb/core/usb.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/usb/core/usb.c +2 -2
@@ -914,11 +914,11 @@ int usb_buffer_map_sg(const struct usb_device *dev, int is_in, || !(bus = dev->bus) || !(controller = bus->controller) || !controller->dma_mask) -return -1 ; +return -EINVAL ;/* FIXME generic api broken like pci, can't report errors */ return dma_map_sg (controller, sg, nents, - is_in ?DMA_FROM_DEVICE :DMA_TO_DEVICE ); + is_in ?DMA_FROM_DEVICE :DMA_TO_DEVICE ) ? : -ENOMEM ; }EXPORT_SYMBOL_GPL (usb_buffer_map_sg);
Signature · 1 line
1.6.3.3