Skip to content

Commit 402dab5

Browse files
Dan Carpentergroeck
authored andcommitted
hwmon: (pmbus/max20730) use scnprintf() instead of snprintf()
The snprintf() function returns the number of characters which would have been printed if there were enough space, but the scnprintf() returns the number of characters which were actually printed. If the buffer is not large enough, then using snprintf() would result in a read overflow and an information leak. Fixes: 8910c0b ("hwmon: (pmbus/max20730) add device monitoring via debugfs") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Link: https://lore.kernel.org/r/20201022070824.GC2817762@mwanda Signed-off-by: Guenter Roeck <linux@roeck-us.net>
1 parent 3650b22 commit 402dab5

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

drivers/hwmon/pmbus/max20730.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ static ssize_t max20730_debugfs_read(struct file *file, char __user *buf,
122122
switch (idx) {
123123
case MAX20730_DEBUGFS_VOUT_MIN:
124124
ret = VOLT_FROM_REG(data->mfr_voutmin * 10000);
125-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d.%d\n",
126-
ret / 10000, ret % 10000);
125+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d.%d\n",
126+
ret / 10000, ret % 10000);
127127
break;
128128
case MAX20730_DEBUGFS_FREQUENCY:
129129
val = (data->mfr_devset1 & MAX20730_MFR_DEVSET1_FSW_MASK)
@@ -141,7 +141,7 @@ static ssize_t max20730_debugfs_read(struct file *file, char __user *buf,
141141
ret = 800;
142142
else
143143
ret = 900;
144-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
144+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
145145
break;
146146
case MAX20730_DEBUGFS_PG_DELAY:
147147
val = (data->mfr_devset1 & MAX20730_MFR_DEVSET1_TSTAT_MASK)
@@ -223,7 +223,7 @@ static ssize_t max20730_debugfs_read(struct file *file, char __user *buf,
223223
case MAX20730_DEBUGFS_OC_PROTECT_MODE:
224224
ret = (data->mfr_devset2 & MAX20730_MFR_DEVSET2_OCPM_MASK)
225225
>> MAX20730_MFR_DEVSET2_OCPM_BIT_POS;
226-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
226+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
227227
break;
228228
case MAX20730_DEBUGFS_SS_TIMING:
229229
val = (data->mfr_devset2 & MAX20730_MFR_DEVSET2_SS_MASK)
@@ -241,50 +241,50 @@ static ssize_t max20730_debugfs_read(struct file *file, char __user *buf,
241241
case MAX20730_DEBUGFS_IMAX:
242242
ret = (data->mfr_devset2 & MAX20730_MFR_DEVSET2_IMAX_MASK)
243243
>> MAX20730_MFR_DEVSET2_IMAX_BIT_POS;
244-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
244+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
245245
break;
246246
case MAX20730_DEBUGFS_OPERATION:
247247
ret = i2c_smbus_read_byte_data(psu->client, PMBUS_OPERATION);
248248
if (ret < 0)
249249
return ret;
250-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
250+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
251251
break;
252252
case MAX20730_DEBUGFS_ON_OFF_CONFIG:
253253
ret = i2c_smbus_read_byte_data(psu->client, PMBUS_ON_OFF_CONFIG);
254254
if (ret < 0)
255255
return ret;
256-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
256+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
257257
break;
258258
case MAX20730_DEBUGFS_SMBALERT_MASK:
259259
ret = i2c_smbus_read_word_data(psu->client,
260260
PMBUS_SMB_ALERT_MASK);
261261
if (ret < 0)
262262
return ret;
263-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
263+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
264264
break;
265265
case MAX20730_DEBUGFS_VOUT_MODE:
266266
ret = i2c_smbus_read_byte_data(psu->client, PMBUS_VOUT_MODE);
267267
if (ret < 0)
268268
return ret;
269-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
269+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX, "%d\n", ret);
270270
break;
271271
case MAX20730_DEBUGFS_VOUT_COMMAND:
272272
ret = i2c_smbus_read_word_data(psu->client, PMBUS_VOUT_COMMAND);
273273
if (ret < 0)
274274
return ret;
275275

276276
ret = VOLT_FROM_REG(ret * 10000);
277-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX,
278-
"%d.%d\n", ret / 10000, ret % 10000);
277+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX,
278+
"%d.%d\n", ret / 10000, ret % 10000);
279279
break;
280280
case MAX20730_DEBUGFS_VOUT_MAX:
281281
ret = i2c_smbus_read_word_data(psu->client, PMBUS_VOUT_MAX);
282282
if (ret < 0)
283283
return ret;
284284

285285
ret = VOLT_FROM_REG(ret * 10000);
286-
len = snprintf(tbuf, DEBUG_FS_DATA_MAX,
287-
"%d.%d\n", ret / 10000, ret % 10000);
286+
len = scnprintf(tbuf, DEBUG_FS_DATA_MAX,
287+
"%d.%d\n", ret / 10000, ret % 10000);
288288
break;
289289
default:
290290
len = strlcpy(tbuf, "Invalid\n", DEBUG_FS_DATA_MAX);

0 commit comments

Comments
 (0)