fs/ocfs2/cluster/heartbeat.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
The function simple_strtol ignores overflows and has an awkward
interface for error checking. Replace with the recommended kstrtol
function leads to clearer error checking and safer conversions.
Signed-off-by: Daniel Yang <danielyangkang@gmail.com>
---
fs/ocfs2/cluster/heartbeat.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
index 4b9f45d70..dff18efbc 100644
--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
@@ -3,6 +3,7 @@
* Copyright (C) 2004, 2005 Oracle. All rights reserved.
*/
+#include "linux/kstrtox.h"
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/jiffies.h>
@@ -1777,8 +1778,9 @@ static ssize_t o2hb_region_dev_store(struct config_item *item,
if (o2nm_this_node() == O2NM_MAX_NODES)
goto out;
- fd = simple_strtol(p, &p, 0);
- if (!p || (*p && (*p != '\n')))
+ int p_to_long_ret = kstrtol(p, 0, &fd);
+
+ if (p_to_long_ret < 0)
goto out;
if (fd < 0 || fd >= INT_MAX)
--
2.39.5
On 11/13/24 4:09 PM, Daniel Yang wrote: > The function simple_strtol ignores overflows and has an awkward > interface for error checking. Replace with the recommended kstrtol > function leads to clearer error checking and safer conversions. > > Signed-off-by: Daniel Yang <danielyangkang@gmail.com> > --- > fs/ocfs2/cluster/heartbeat.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c > index 4b9f45d70..dff18efbc 100644 > --- a/fs/ocfs2/cluster/heartbeat.c > +++ b/fs/ocfs2/cluster/heartbeat.c > @@ -3,6 +3,7 @@ > * Copyright (C) 2004, 2005 Oracle. All rights reserved. > */ > > +#include "linux/kstrtox.h" > #include <linux/kernel.h> > #include <linux/sched.h> > #include <linux/jiffies.h> > @@ -1777,8 +1778,9 @@ static ssize_t o2hb_region_dev_store(struct config_item *item, > if (o2nm_this_node() == O2NM_MAX_NODES) > goto out; > > - fd = simple_strtol(p, &p, 0); > - if (!p || (*p && (*p != '\n'))) > + int p_to_long_ret = kstrtol(p, 0, &fd); > + Please define at the beginning. Seems we can just re-use 'ret'. BTW, the blank line can be eleminated. Thanks, Joseph > + if (p_to_long_ret < 0) > goto out; > > if (fd < 0 || fd >= INT_MAX)
On Thu, Nov 14, 2024 at 5:05 PM Joseph Qi <joseph.qi@linux.alibaba.com> wrote: > > > > On 11/13/24 4:09 PM, Daniel Yang wrote: > > The function simple_strtol ignores overflows and has an awkward > > interface for error checking. Replace with the recommended kstrtol > > function leads to clearer error checking and safer conversions. > > > > Signed-off-by: Daniel Yang <danielyangkang@gmail.com> > > --- > > fs/ocfs2/cluster/heartbeat.c | 5 +++-- > > 1 file changed, 3 insertions(+), 2 deletions(-) > > > > diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c > > index 4b9f45d70..dff18efbc 100644 > > --- a/fs/ocfs2/cluster/heartbeat.c > > +++ b/fs/ocfs2/cluster/heartbeat.c > > @@ -3,6 +3,7 @@ > > * Copyright (C) 2004, 2005 Oracle. All rights reserved. > > */ > > > > +#include "linux/kstrtox.h" > > #include <linux/kernel.h> > > #include <linux/sched.h> > > #include <linux/jiffies.h> > > @@ -1777,8 +1778,9 @@ static ssize_t o2hb_region_dev_store(struct config_item *item, > > if (o2nm_this_node() == O2NM_MAX_NODES) > > goto out; > > > > - fd = simple_strtol(p, &p, 0); > > - if (!p || (*p && (*p != '\n'))) > > + int p_to_long_ret = kstrtol(p, 0, &fd); > > + > > Please define at the beginning. > Seems we can just re-use 'ret'. > BTW, the blank line can be eleminated. > > Thanks, > Joseph > > > + if (p_to_long_ret < 0) > > goto out; > > > > if (fd < 0 || fd >= INT_MAX) > Ok. Made the changes and sent PATCH v2. Lmk if there's anything else that needs to be changed. - Daniel
© 2016 - 2026 Red Hat, Inc.