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 --- 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