Commit a900cc5c authored by Takashi Iwai's avatar Takashi Iwai Committed by Jens Axboe

libata: transport: Use scnprintf() for avoiding potential buffer overflow

Since snprintf() returns the would-be-output size instead of the
actual output size, the succeeding calls may go beyond the given
buffer limit.  Fix it by replacing with scnprintf().
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 2c523b34
...@@ -208,7 +208,7 @@ show_ata_port_##name(struct device *dev, \ ...@@ -208,7 +208,7 @@ show_ata_port_##name(struct device *dev, \
{ \ { \
struct ata_port *ap = transport_class_to_port(dev); \ struct ata_port *ap = transport_class_to_port(dev); \
\ \
return snprintf(buf, 20, format_string, cast ap->field); \ return scnprintf(buf, 20, format_string, cast ap->field); \
} }
#define ata_port_simple_attr(field, name, format_string, type) \ #define ata_port_simple_attr(field, name, format_string, type) \
...@@ -479,7 +479,7 @@ show_ata_dev_##field(struct device *dev, \ ...@@ -479,7 +479,7 @@ show_ata_dev_##field(struct device *dev, \
{ \ { \
struct ata_device *ata_dev = transport_class_to_dev(dev); \ struct ata_device *ata_dev = transport_class_to_dev(dev); \
\ \
return snprintf(buf, 20, format_string, cast ata_dev->field); \ return scnprintf(buf, 20, format_string, cast ata_dev->field); \
} }
#define ata_dev_simple_attr(field, format_string, type) \ #define ata_dev_simple_attr(field, format_string, type) \
...@@ -533,7 +533,7 @@ show_ata_dev_id(struct device *dev, ...@@ -533,7 +533,7 @@ show_ata_dev_id(struct device *dev,
if (ata_dev->class == ATA_DEV_PMP) if (ata_dev->class == ATA_DEV_PMP)
return 0; return 0;
for(i=0;i<ATA_ID_WORDS;i++) { for(i=0;i<ATA_ID_WORDS;i++) {
written += snprintf(buf+written, 20, "%04x%c", written += scnprintf(buf+written, 20, "%04x%c",
ata_dev->id[i], ata_dev->id[i],
((i+1) & 7) ? ' ' : '\n'); ((i+1) & 7) ? ' ' : '\n');
} }
...@@ -552,7 +552,7 @@ show_ata_dev_gscr(struct device *dev, ...@@ -552,7 +552,7 @@ show_ata_dev_gscr(struct device *dev,
if (ata_dev->class != ATA_DEV_PMP) if (ata_dev->class != ATA_DEV_PMP)
return 0; return 0;
for(i=0;i<SATA_PMP_GSCR_DWORDS;i++) { for(i=0;i<SATA_PMP_GSCR_DWORDS;i++) {
written += snprintf(buf+written, 20, "%08x%c", written += scnprintf(buf+written, 20, "%08x%c",
ata_dev->gscr[i], ata_dev->gscr[i],
((i+1) & 3) ? ' ' : '\n'); ((i+1) & 3) ? ' ' : '\n');
} }
...@@ -581,7 +581,7 @@ show_ata_dev_trim(struct device *dev, ...@@ -581,7 +581,7 @@ show_ata_dev_trim(struct device *dev,
else else
mode = "unqueued"; mode = "unqueued";
return snprintf(buf, 20, "%s\n", mode); return scnprintf(buf, 20, "%s\n", mode);
} }
static DEVICE_ATTR(trim, S_IRUGO, show_ata_dev_trim, NULL); static DEVICE_ATTR(trim, S_IRUGO, show_ata_dev_trim, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment