On Wed, Feb 19, 2020 at 04:48:21PM -0800, Scott Branden wrote: > +static int test_dev_config_update_size_t(const char *buf, > + size_t size, > + size_t *cfg) > +{ > + int ret; > + long new; > + > + ret = kstrtol(buf, 10, &new); > + if (ret) > + return ret; > + > + if (new > SIZE_MAX) This "new" variable is long and SIZE_MAX is ULONG_MAX so the condition can't be true. > + return -EINVAL; > + > + mutex_lock(&test_fw_mutex); > + *(size_t *)cfg = new; > + mutex_unlock(&test_fw_mutex); > + > + /* Always return full write size even if we didn't consume all */ > + return size; > +} > + > +static ssize_t test_dev_config_show_size_t(char *buf, int cfg) > +{ > + size_t val; > + > + mutex_lock(&test_fw_mutex); > + val = cfg; > + mutex_unlock(&test_fw_mutex); Both val and cfg are stack variables so there is no need for locking. Probably you meant to pass a pointer to cfg? > + > + return snprintf(buf, PAGE_SIZE, "%zu\n", val); > +} > + > static ssize_t test_dev_config_show_int(char *buf, int cfg) > { > int val; regards, dan carpenter