Commit 1e31aa9270daab40c7aef9d5488982e3475b87ef
Committed by
Greg Kroah-Hartman
1 parent
286c24028c
Exists in
master
and in
16 other branches
misc: mic: Fix user space namespace pollution from mic_common.h.
Avoid declaring ALIGN() and __aligned() in include/uapi/linux/mic_common.h since they pollute user space namespace. Also, mic_aligned_size() can be simply replaced simply by sizeof() since all structures where mic_aligned_size() is used are declared using __attribute__ ((aligned(8))); -- >From mail from H Peter Anvin about this: On Fri, Nov 08, 2013 H Peter Anvin <h.peter.anvin@intel.com> wrote: Subject: Namespace pollution in mic_common.h This puts two macros, ALIGN() and __aligned(), into arbitrary user space namespace. This really isn't safe or acceptable, especially since those symbols are highly generic. ... When these structures are forced-aligned, they will in fact have padding automatically added by the compiler to an 8-byte boundary anyway, so mic_aligned_size() does nothing. ... Reported-by: H Peter Anvin <h.peter.anvin@intel.com> Reviewed-by: Sudeep Dutt <sudeep.dutt@intel.com> Signed-off-by: Nikhil Rao <nikhil.rao@intel.com> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Showing 5 changed files with 17 additions and 26 deletions Side-by-side Diff
Documentation/mic/mpssd/mpssd.c
... | ... | @@ -313,7 +313,7 @@ |
313 | 313 | int i; |
314 | 314 | void *dp = get_dp(mic, type); |
315 | 315 | |
316 | - for (i = mic_aligned_size(struct mic_bootparam); i < PAGE_SIZE; | |
316 | + for (i = sizeof(struct mic_bootparam); i < PAGE_SIZE; | |
317 | 317 | i += mic_total_desc_size(d)) { |
318 | 318 | d = dp + i; |
319 | 319 | |
... | ... | @@ -520,7 +520,7 @@ |
520 | 520 | virtio_net(void *arg) |
521 | 521 | { |
522 | 522 | static __u8 vnet_hdr[2][sizeof(struct virtio_net_hdr)]; |
523 | - static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __aligned(64); | |
523 | + static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __attribute__ ((aligned(64))); | |
524 | 524 | struct iovec vnet_iov[2][2] = { |
525 | 525 | { { .iov_base = vnet_hdr[0], .iov_len = sizeof(vnet_hdr[0]) }, |
526 | 526 | { .iov_base = vnet_buf[0], .iov_len = sizeof(vnet_buf[0]) } }, |
drivers/misc/mic/card/mic_virtio.c
... | ... | @@ -520,8 +520,8 @@ |
520 | 520 | struct device *dev; |
521 | 521 | int ret; |
522 | 522 | |
523 | - for (i = mic_aligned_size(struct mic_bootparam); | |
524 | - i < MIC_DP_SIZE; i += mic_total_desc_size(d)) { | |
523 | + for (i = sizeof(struct mic_bootparam); i < MIC_DP_SIZE; | |
524 | + i += mic_total_desc_size(d)) { | |
525 | 525 | d = mdrv->dp + i; |
526 | 526 | dc = (void __iomem *)d + mic_aligned_desc_size(d); |
527 | 527 | /* |
drivers/misc/mic/card/mic_virtio.h
... | ... | @@ -42,8 +42,8 @@ |
42 | 42 | |
43 | 43 | static inline unsigned mic_desc_size(struct mic_device_desc __iomem *desc) |
44 | 44 | { |
45 | - return mic_aligned_size(*desc) | |
46 | - + ioread8(&desc->num_vq) * mic_aligned_size(struct mic_vqconfig) | |
45 | + return sizeof(*desc) | |
46 | + + ioread8(&desc->num_vq) * sizeof(struct mic_vqconfig) | |
47 | 47 | + ioread8(&desc->feature_len) * 2 |
48 | 48 | + ioread8(&desc->config_len); |
49 | 49 | } |
... | ... | @@ -67,8 +67,7 @@ |
67 | 67 | } |
68 | 68 | static inline unsigned mic_total_desc_size(struct mic_device_desc __iomem *desc) |
69 | 69 | { |
70 | - return mic_aligned_desc_size(desc) + | |
71 | - mic_aligned_size(struct mic_device_ctrl); | |
70 | + return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl); | |
72 | 71 | } |
73 | 72 | |
74 | 73 | int mic_devices_init(struct mic_driver *mdrv); |
drivers/misc/mic/host/mic_virtio.c
... | ... | @@ -467,7 +467,7 @@ |
467 | 467 | } |
468 | 468 | |
469 | 469 | /* Find the first free device page entry */ |
470 | - for (i = mic_aligned_size(struct mic_bootparam); | |
470 | + for (i = sizeof(struct mic_bootparam); | |
471 | 471 | i < MIC_DP_SIZE - mic_total_desc_size(dd_config); |
472 | 472 | i += mic_total_desc_size(devp)) { |
473 | 473 | devp = mdev->dp + i; |
include/uapi/linux/mic_common.h
... | ... | @@ -23,13 +23,8 @@ |
23 | 23 | |
24 | 24 | #include <linux/virtio_ring.h> |
25 | 25 | |
26 | -#ifndef __KERNEL__ | |
27 | -#define ALIGN(a, x) (((a) + (x) - 1) & ~((x) - 1)) | |
28 | -#define __aligned(x) __attribute__ ((aligned(x))) | |
29 | -#endif | |
26 | +#define __mic_align(a, x) (((a) + (x) - 1) & ~((x) - 1)) | |
30 | 27 | |
31 | -#define mic_aligned_size(x) ALIGN(sizeof(x), 8) | |
32 | - | |
33 | 28 | /** |
34 | 29 | * struct mic_device_desc: Virtio device information shared between the |
35 | 30 | * virtio driver and userspace backend |
... | ... | @@ -49,7 +44,7 @@ |
49 | 44 | __u8 config_len; |
50 | 45 | __u8 status; |
51 | 46 | __u64 config[0]; |
52 | -} __aligned(8); | |
47 | +} __attribute__ ((aligned(8))); | |
53 | 48 | |
54 | 49 | /** |
55 | 50 | * struct mic_device_ctrl: Per virtio device information in the device page |
... | ... | @@ -74,7 +69,7 @@ |
74 | 69 | __u8 used_address_updated; |
75 | 70 | __s8 c2h_vdev_db; |
76 | 71 | __s8 h2c_vdev_db; |
77 | -} __aligned(8); | |
72 | +} __attribute__ ((aligned(8))); | |
78 | 73 | |
79 | 74 | /** |
80 | 75 | * struct mic_bootparam: Virtio device independent information in device page |
... | ... | @@ -93,7 +88,7 @@ |
93 | 88 | __s8 h2c_config_db; |
94 | 89 | __u8 shutdown_status; |
95 | 90 | __u8 shutdown_card; |
96 | -} __aligned(8); | |
91 | +} __attribute__ ((aligned(8))); | |
97 | 92 | |
98 | 93 | /** |
99 | 94 | * struct mic_device_page: High level representation of the device page |
... | ... | @@ -119,7 +114,7 @@ |
119 | 114 | __u64 address; |
120 | 115 | __u64 used_address; |
121 | 116 | __u16 num; |
122 | -} __aligned(8); | |
117 | +} __attribute__ ((aligned(8))); | |
123 | 118 | |
124 | 119 | /* |
125 | 120 | * The alignment to use between consumer and producer parts of vring. |
126 | 121 | |
... | ... | @@ -173,15 +168,13 @@ |
173 | 168 | int len; |
174 | 169 | }; |
175 | 170 | |
176 | -#define mic_aligned_desc_size(d) ALIGN(mic_desc_size(d), 8) | |
171 | +#define mic_aligned_desc_size(d) __mic_align(mic_desc_size(d), 8) | |
177 | 172 | |
178 | 173 | #ifndef INTEL_MIC_CARD |
179 | 174 | static inline unsigned mic_desc_size(const struct mic_device_desc *desc) |
180 | 175 | { |
181 | - return mic_aligned_size(*desc) | |
182 | - + desc->num_vq * mic_aligned_size(struct mic_vqconfig) | |
183 | - + desc->feature_len * 2 | |
184 | - + desc->config_len; | |
176 | + return sizeof(*desc) + desc->num_vq * sizeof(struct mic_vqconfig) | |
177 | + + desc->feature_len * 2 + desc->config_len; | |
185 | 178 | } |
186 | 179 | |
187 | 180 | static inline struct mic_vqconfig * |
... | ... | @@ -201,8 +194,7 @@ |
201 | 194 | } |
202 | 195 | static inline unsigned mic_total_desc_size(struct mic_device_desc *desc) |
203 | 196 | { |
204 | - return mic_aligned_desc_size(desc) + | |
205 | - mic_aligned_size(struct mic_device_ctrl); | |
197 | + return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl); | |
206 | 198 | } |
207 | 199 | #endif |
208 | 200 |