diff options
| author | chas williams - CONTRACTOR <chas@cmf.nrl.navy.mil> | 2012-12-17 01:00:01 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-12-17 23:50:51 -0500 |
| commit | 3c4177716cd2e452229dd0b7c25d192c48c1e7ac (patch) | |
| tree | df6fad87e61b45af98d0a2a540bf07318b4a4f7f /net/atm | |
| parent | 4e4b53768f1ddce38b7f6edcad3a063020ef0024 (diff) | |
atm: use scnprintf() instead of sprintf()
As reported by Chen Gang <gang.chen@asianux.com>, we should ensure there
is enough space when formatting the sysfs buffers.
Signed-off-by: Chas Williams <chas@cmf.nrl.navy.mil>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/atm')
| -rw-r--r-- | net/atm/atm_sysfs.c | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/net/atm/atm_sysfs.c b/net/atm/atm_sysfs.c index f49da5814bc3..350bf62b2ae3 100644 --- a/net/atm/atm_sysfs.c +++ b/net/atm/atm_sysfs.c | |||
| @@ -14,49 +14,45 @@ static ssize_t show_type(struct device *cdev, | |||
| 14 | struct device_attribute *attr, char *buf) | 14 | struct device_attribute *attr, char *buf) |
| 15 | { | 15 | { |
| 16 | struct atm_dev *adev = to_atm_dev(cdev); | 16 | struct atm_dev *adev = to_atm_dev(cdev); |
| 17 | return sprintf(buf, "%s\n", adev->type); | 17 | |
| 18 | return scnprintf(buf, PAGE_SIZE, "%s\n", adev->type); | ||
| 18 | } | 19 | } |
| 19 | 20 | ||
| 20 | static ssize_t show_address(struct device *cdev, | 21 | static ssize_t show_address(struct device *cdev, |
| 21 | struct device_attribute *attr, char *buf) | 22 | struct device_attribute *attr, char *buf) |
| 22 | { | 23 | { |
| 23 | char *pos = buf; | ||
| 24 | struct atm_dev *adev = to_atm_dev(cdev); | 24 | struct atm_dev *adev = to_atm_dev(cdev); |
| 25 | int i; | ||
| 26 | |||
| 27 | for (i = 0; i < (ESI_LEN - 1); i++) | ||
| 28 | pos += sprintf(pos, "%02x:", adev->esi[i]); | ||
| 29 | pos += sprintf(pos, "%02x\n", adev->esi[i]); | ||
| 30 | 25 | ||
| 31 | return pos - buf; | 26 | return scnprintf(buf, PAGE_SIZE, "%pM\n", adev->esi); |
| 32 | } | 27 | } |
| 33 | 28 | ||
| 34 | static ssize_t show_atmaddress(struct device *cdev, | 29 | static ssize_t show_atmaddress(struct device *cdev, |
| 35 | struct device_attribute *attr, char *buf) | 30 | struct device_attribute *attr, char *buf) |
| 36 | { | 31 | { |
| 37 | unsigned long flags; | 32 | unsigned long flags; |
| 38 | char *pos = buf; | ||
| 39 | struct atm_dev *adev = to_atm_dev(cdev); | 33 | struct atm_dev *adev = to_atm_dev(cdev); |
| 40 | struct atm_dev_addr *aaddr; | 34 | struct atm_dev_addr *aaddr; |
| 41 | int bin[] = { 1, 2, 10, 6, 1 }, *fmt = bin; | 35 | int bin[] = { 1, 2, 10, 6, 1 }, *fmt = bin; |
| 42 | int i, j; | 36 | int i, j, count = 0; |
| 43 | 37 | ||
| 44 | spin_lock_irqsave(&adev->lock, flags); | 38 | spin_lock_irqsave(&adev->lock, flags); |
| 45 | list_for_each_entry(aaddr, &adev->local, entry) { | 39 | list_for_each_entry(aaddr, &adev->local, entry) { |
| 46 | for (i = 0, j = 0; i < ATM_ESA_LEN; ++i, ++j) { | 40 | for (i = 0, j = 0; i < ATM_ESA_LEN; ++i, ++j) { |
| 47 | if (j == *fmt) { | 41 | if (j == *fmt) { |
| 48 | pos += sprintf(pos, "."); | 42 | count += scnprintf(buf + count, |
| 43 | PAGE_SIZE - count, "."); | ||
| 49 | ++fmt; | 44 | ++fmt; |
| 50 | j = 0; | 45 | j = 0; |
| 51 | } | 46 | } |
| 52 | pos += sprintf(pos, "%02x", | 47 | count += scnprintf(buf + count, |
| 53 | aaddr->addr.sas_addr.prv[i]); | 48 | PAGE_SIZE - count, "%02x", |
| 49 | aaddr->addr.sas_addr.prv[i]); | ||
| 54 | } | 50 | } |
| 55 | pos += sprintf(pos, "\n"); | 51 | count += scnprintf(buf + count, PAGE_SIZE - count, "\n"); |
| 56 | } | 52 | } |
| 57 | spin_unlock_irqrestore(&adev->lock, flags); | 53 | spin_unlock_irqrestore(&adev->lock, flags); |
| 58 | 54 | ||
| 59 | return pos - buf; | 55 | return count; |
| 60 | } | 56 | } |
| 61 | 57 | ||
| 62 | static ssize_t show_atmindex(struct device *cdev, | 58 | static ssize_t show_atmindex(struct device *cdev, |
| @@ -64,25 +60,21 @@ static ssize_t show_atmindex(struct device *cdev, | |||
| 64 | { | 60 | { |
| 65 | struct atm_dev *adev = to_atm_dev(cdev); | 61 | struct atm_dev *adev = to_atm_dev(cdev); |
| 66 | 62 | ||
| 67 | return sprintf(buf, "%d\n", adev->number); | 63 | return scnprintf(buf, PAGE_SIZE, "%d\n", adev->number); |
| 68 | } | 64 | } |
| 69 | 65 | ||
| 70 | static ssize_t show_carrier(struct device *cdev, | 66 | static ssize_t show_carrier(struct device *cdev, |
| 71 | struct device_attribute *attr, char *buf) | 67 | struct device_attribute *attr, char *buf) |
| 72 | { | 68 | { |
| 73 | char *pos = buf; | ||
| 74 | struct atm_dev *adev = to_atm_dev(cdev); | 69 | struct atm_dev *adev = to_atm_dev(cdev); |
| 75 | 70 | ||
| 76 | pos += sprintf(pos, "%d\n", | 71 | return scnprintf(buf, PAGE_SIZE, "%d\n", |
| 77 | adev->signal == ATM_PHY_SIG_LOST ? 0 : 1); | 72 | adev->signal == ATM_PHY_SIG_LOST ? 0 : 1); |
| 78 | |||
| 79 | return pos - buf; | ||
| 80 | } | 73 | } |
| 81 | 74 | ||
| 82 | static ssize_t show_link_rate(struct device *cdev, | 75 | static ssize_t show_link_rate(struct device *cdev, |
| 83 | struct device_attribute *attr, char *buf) | 76 | struct device_attribute *attr, char *buf) |
| 84 | { | 77 | { |
| 85 | char *pos = buf; | ||
| 86 | struct atm_dev *adev = to_atm_dev(cdev); | 78 | struct atm_dev *adev = to_atm_dev(cdev); |
| 87 | int link_rate; | 79 | int link_rate; |
| 88 | 80 | ||
| @@ -100,9 +92,7 @@ static ssize_t show_link_rate(struct device *cdev, | |||
| 100 | default: | 92 | default: |
| 101 | link_rate = adev->link_rate * 8 * 53; | 93 | link_rate = adev->link_rate * 8 * 53; |
| 102 | } | 94 | } |
| 103 | pos += sprintf(pos, "%d\n", link_rate); | 95 | return scnprintf(buf, PAGE_SIZE, "%d\n", link_rate); |
| 104 | |||
| 105 | return pos - buf; | ||
| 106 | } | 96 | } |
| 107 | 97 | ||
| 108 | static DEVICE_ATTR(address, S_IRUGO, show_address, NULL); | 98 | static DEVICE_ATTR(address, S_IRUGO, show_address, NULL); |
