Since actual value used for 'la_mask' can't exceed 0xffff, it
doesn't make sense to parse larger values as 'unsigned long'.
So switch to 'u16' to store an expected value and use the
convenient 'kstrtou16_from_user()' to simplify 'tp_la_write()'
Signed-off-by: Dmitry Antipov <redacted>
---
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
index f521737d1275..5c6c27418891 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
@@ -664,20 +664,13 @@ static ssize_t tp_la_write(struct file *file, const char __user *buf,
size_t count, loff_t *pos)
{
int err;
- char s[32];
- unsigned long val;
- size_t size = min(sizeof(s) - 1, count);
+ u16 val;
struct adapter *adap = file_inode(file)->i_private;
- if (copy_from_user(s, buf, size))
- return -EFAULT;
- s[size] = '\0';
- err = kstrtoul(s, 0, &val);
+ err = kstrtou16_from_user(buf, count, 0, &val);
if (err)
return err;
- if (val > 0xffff)
- return -EINVAL;
- adap->params.tp.la_mask = val << 16;
+ adap->params.tp.la_mask = (unsigned int)val << 16;
t4_set_reg_field(adap, TP_DBG_LA_CONFIG_A, 0xffff0000U,
adap->params.tp.la_mask);
return count;--
2.55.0