aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/core.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-12-28 23:44:29 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-28 23:44:29 -0500
commitb07039b79c9ea64c1eacda1e01d645082e4a0d5d (patch)
tree61532ba8425fdf897d6a67a74391a1c6f322a07b /drivers/base/core.c
parent02061181d3a9ccfe15ef6bc15fa56283acc47620 (diff)
parent16df1456aa858a86f398dbc7d27649eb6662b0cc (diff)
Merge tag 'driver-core-4.21-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core updates from Greg KH: "Here is the "big" set of driver core patches for 4.21-rc1. It's not really big, just a number of small changes for some reported issues, some documentation updates to hopefully make it harder for people to abuse the driver model, and some other minor cleanups. All of these have been in linux-next for a while with no reported issues" * tag 'driver-core-4.21-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: mm, memory_hotplug: update a comment in unregister_memory() component: convert to DEFINE_SHOW_ATTRIBUTE sysfs: Disable lockdep for driver bind/unbind files driver core: Add missing dev->bus->need_parent_lock checks kobject: return error code if writing /sys/.../uevent fails driver core: Move async_synchronize_full call driver core: platform: Respect return code of platform_device_register_full() kref/kobject: Improve documentation drivers/base/memory.c: Use DEVICE_ATTR_RO and friends driver core: Replace simple_strto{l,ul} by kstrtou{l,ul} kernfs: Improve kernfs_notify() poll notification latency kobject: Fix warnings in lib/kobject_uevent.c kobject: drop unnecessary cast "%llu" for u64 driver core: fix comments for device_block_probing() driver core: Replace simple_strtol by kstrtoint
Diffstat (limited to 'drivers/base/core.c')
-rw-r--r--drivers/base/core.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c
index a2f14098663f..0073b09bb99f 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -815,10 +815,12 @@ ssize_t device_store_ulong(struct device *dev,
815 const char *buf, size_t size) 815 const char *buf, size_t size)
816{ 816{
817 struct dev_ext_attribute *ea = to_ext_attr(attr); 817 struct dev_ext_attribute *ea = to_ext_attr(attr);
818 char *end; 818 int ret;
819 unsigned long new = simple_strtoul(buf, &end, 0); 819 unsigned long new;
820 if (end == buf) 820
821 return -EINVAL; 821 ret = kstrtoul(buf, 0, &new);
822 if (ret)
823 return ret;
822 *(unsigned long *)(ea->var) = new; 824 *(unsigned long *)(ea->var) = new;
823 /* Always return full write size even if we didn't consume all */ 825 /* Always return full write size even if we didn't consume all */
824 return size; 826 return size;
@@ -839,9 +841,14 @@ ssize_t device_store_int(struct device *dev,
839 const char *buf, size_t size) 841 const char *buf, size_t size)
840{ 842{
841 struct dev_ext_attribute *ea = to_ext_attr(attr); 843 struct dev_ext_attribute *ea = to_ext_attr(attr);
842 char *end; 844 int ret;
843 long new = simple_strtol(buf, &end, 0); 845 long new;
844 if (end == buf || new > INT_MAX || new < INT_MIN) 846
847 ret = kstrtol(buf, 0, &new);
848 if (ret)
849 return ret;
850
851 if (new > INT_MAX || new < INT_MIN)
845 return -EINVAL; 852 return -EINVAL;
846 *(int *)(ea->var) = new; 853 *(int *)(ea->var) = new;
847 /* Always return full write size even if we didn't consume all */ 854 /* Always return full write size even if we didn't consume all */
@@ -911,8 +918,7 @@ static void device_release(struct kobject *kobj)
911 else if (dev->class && dev->class->dev_release) 918 else if (dev->class && dev->class->dev_release)
912 dev->class->dev_release(dev); 919 dev->class->dev_release(dev);
913 else 920 else
914 WARN(1, KERN_ERR "Device '%s' does not have a release() " 921 WARN(1, KERN_ERR "Device '%s' does not have a release() function, it is broken and must be fixed. See Documentation/kobject.txt.\n",
915 "function, it is broken and must be fixed.\n",
916 dev_name(dev)); 922 dev_name(dev));
917 kfree(p); 923 kfree(p);
918} 924}
@@ -1088,8 +1094,14 @@ out:
1088static ssize_t uevent_store(struct device *dev, struct device_attribute *attr, 1094static ssize_t uevent_store(struct device *dev, struct device_attribute *attr,
1089 const char *buf, size_t count) 1095 const char *buf, size_t count)
1090{ 1096{
1091 if (kobject_synth_uevent(&dev->kobj, buf, count)) 1097 int rc;
1098
1099 rc = kobject_synth_uevent(&dev->kobj, buf, count);
1100
1101 if (rc) {
1092 dev_err(dev, "uevent: failed to send synthetic uevent\n"); 1102 dev_err(dev, "uevent: failed to send synthetic uevent\n");
1103 return rc;
1104 }
1093 1105
1094 return count; 1106 return count;
1095} 1107}