Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: gadget: storage: strict coversion of 'ro' parameter

Bring a strict way to get the 'ro' parameter from the user.

The patch followed by this one adds another boolean parameter. To be consistent
Michał Nazarewicz proposed to use simple_strtol() in both cases (correspondend
discussion in LKML [1]). Due to simple_strtol() doesn't return error in a good
way and we have a boolean parameter the strict_strtoul() is used.

[1] http://lkml.org/lkml/2010/7/14/169

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Andy Shevchenko and committed by
Greg Kroah-Hartman
8156d158 787f4e5a

+4 -4
+4 -4
drivers/usb/gadget/storage_common.c
··· 748 748 ssize_t rc = count; 749 749 struct fsg_lun *curlun = fsg_lun_from_dev(dev); 750 750 struct rw_semaphore *filesem = dev_get_drvdata(dev); 751 - int i; 751 + unsigned long ro; 752 752 753 - if (sscanf(buf, "%d", &i) != 1) 753 + if (strict_strtoul(buf, 2, &ro)) 754 754 return -EINVAL; 755 755 756 756 /* ··· 762 762 LDBG(curlun, "read-only status change prevented\n"); 763 763 rc = -EBUSY; 764 764 } else { 765 - curlun->ro = !!i; 766 - curlun->initially_ro = !!i; 765 + curlun->ro = ro; 766 + curlun->initially_ro = ro; 767 767 LDBG(curlun, "read-only status set to %d\n", curlun->ro); 768 768 } 769 769 up_read(filesem);