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>
This commit is contained in:
parent
286c24028c
commit
1e31aa9270
5 changed files with 17 additions and 26 deletions
|
@ -313,7 +313,7 @@ static struct mic_device_desc *get_device_desc(struct mic_info *mic, int type)
|
||||||
int i;
|
int i;
|
||||||
void *dp = get_dp(mic, type);
|
void *dp = get_dp(mic, type);
|
||||||
|
|
||||||
for (i = mic_aligned_size(struct mic_bootparam); i < PAGE_SIZE;
|
for (i = sizeof(struct mic_bootparam); i < PAGE_SIZE;
|
||||||
i += mic_total_desc_size(d)) {
|
i += mic_total_desc_size(d)) {
|
||||||
d = dp + i;
|
d = dp + i;
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ static void *
|
||||||
virtio_net(void *arg)
|
virtio_net(void *arg)
|
||||||
{
|
{
|
||||||
static __u8 vnet_hdr[2][sizeof(struct virtio_net_hdr)];
|
static __u8 vnet_hdr[2][sizeof(struct virtio_net_hdr)];
|
||||||
static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __aligned(64);
|
static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __attribute__ ((aligned(64)));
|
||||||
struct iovec vnet_iov[2][2] = {
|
struct iovec vnet_iov[2][2] = {
|
||||||
{ { .iov_base = vnet_hdr[0], .iov_len = sizeof(vnet_hdr[0]) },
|
{ { .iov_base = vnet_hdr[0], .iov_len = sizeof(vnet_hdr[0]) },
|
||||||
{ .iov_base = vnet_buf[0], .iov_len = sizeof(vnet_buf[0]) } },
|
{ .iov_base = vnet_buf[0], .iov_len = sizeof(vnet_buf[0]) } },
|
||||||
|
|
|
@ -520,8 +520,8 @@ static void mic_scan_devices(struct mic_driver *mdrv, bool remove)
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
for (i = mic_aligned_size(struct mic_bootparam);
|
for (i = sizeof(struct mic_bootparam); i < MIC_DP_SIZE;
|
||||||
i < MIC_DP_SIZE; i += mic_total_desc_size(d)) {
|
i += mic_total_desc_size(d)) {
|
||||||
d = mdrv->dp + i;
|
d = mdrv->dp + i;
|
||||||
dc = (void __iomem *)d + mic_aligned_desc_size(d);
|
dc = (void __iomem *)d + mic_aligned_desc_size(d);
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
|
|
||||||
static inline unsigned mic_desc_size(struct mic_device_desc __iomem *desc)
|
static inline unsigned mic_desc_size(struct mic_device_desc __iomem *desc)
|
||||||
{
|
{
|
||||||
return mic_aligned_size(*desc)
|
return sizeof(*desc)
|
||||||
+ ioread8(&desc->num_vq) * mic_aligned_size(struct mic_vqconfig)
|
+ ioread8(&desc->num_vq) * sizeof(struct mic_vqconfig)
|
||||||
+ ioread8(&desc->feature_len) * 2
|
+ ioread8(&desc->feature_len) * 2
|
||||||
+ ioread8(&desc->config_len);
|
+ ioread8(&desc->config_len);
|
||||||
}
|
}
|
||||||
|
@ -67,8 +67,7 @@ mic_vq_configspace(struct mic_device_desc __iomem *desc)
|
||||||
}
|
}
|
||||||
static inline unsigned mic_total_desc_size(struct mic_device_desc __iomem *desc)
|
static inline unsigned mic_total_desc_size(struct mic_device_desc __iomem *desc)
|
||||||
{
|
{
|
||||||
return mic_aligned_desc_size(desc) +
|
return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl);
|
||||||
mic_aligned_size(struct mic_device_ctrl);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int mic_devices_init(struct mic_driver *mdrv);
|
int mic_devices_init(struct mic_driver *mdrv);
|
||||||
|
|
|
@ -467,7 +467,7 @@ static int mic_copy_dp_entry(struct mic_vdev *mvdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find the first free device page entry */
|
/* Find the first free device page entry */
|
||||||
for (i = mic_aligned_size(struct mic_bootparam);
|
for (i = sizeof(struct mic_bootparam);
|
||||||
i < MIC_DP_SIZE - mic_total_desc_size(dd_config);
|
i < MIC_DP_SIZE - mic_total_desc_size(dd_config);
|
||||||
i += mic_total_desc_size(devp)) {
|
i += mic_total_desc_size(devp)) {
|
||||||
devp = mdev->dp + i;
|
devp = mdev->dp + i;
|
||||||
|
|
|
@ -23,12 +23,7 @@
|
||||||
|
|
||||||
#include <linux/virtio_ring.h>
|
#include <linux/virtio_ring.h>
|
||||||
|
|
||||||
#ifndef __KERNEL__
|
#define __mic_align(a, x) (((a) + (x) - 1) & ~((x) - 1))
|
||||||
#define ALIGN(a, x) (((a) + (x) - 1) & ~((x) - 1))
|
|
||||||
#define __aligned(x) __attribute__ ((aligned(x)))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define mic_aligned_size(x) ALIGN(sizeof(x), 8)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct mic_device_desc: Virtio device information shared between the
|
* struct mic_device_desc: Virtio device information shared between the
|
||||||
|
@ -49,7 +44,7 @@ struct mic_device_desc {
|
||||||
__u8 config_len;
|
__u8 config_len;
|
||||||
__u8 status;
|
__u8 status;
|
||||||
__u64 config[0];
|
__u64 config[0];
|
||||||
} __aligned(8);
|
} __attribute__ ((aligned(8)));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct mic_device_ctrl: Per virtio device information in the device page
|
* struct mic_device_ctrl: Per virtio device information in the device page
|
||||||
|
@ -74,7 +69,7 @@ struct mic_device_ctrl {
|
||||||
__u8 used_address_updated;
|
__u8 used_address_updated;
|
||||||
__s8 c2h_vdev_db;
|
__s8 c2h_vdev_db;
|
||||||
__s8 h2c_vdev_db;
|
__s8 h2c_vdev_db;
|
||||||
} __aligned(8);
|
} __attribute__ ((aligned(8)));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct mic_bootparam: Virtio device independent information in device page
|
* struct mic_bootparam: Virtio device independent information in device page
|
||||||
|
@ -93,7 +88,7 @@ struct mic_bootparam {
|
||||||
__s8 h2c_config_db;
|
__s8 h2c_config_db;
|
||||||
__u8 shutdown_status;
|
__u8 shutdown_status;
|
||||||
__u8 shutdown_card;
|
__u8 shutdown_card;
|
||||||
} __aligned(8);
|
} __attribute__ ((aligned(8)));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct mic_device_page: High level representation of the device page
|
* struct mic_device_page: High level representation of the device page
|
||||||
|
@ -119,7 +114,7 @@ struct mic_vqconfig {
|
||||||
__u64 address;
|
__u64 address;
|
||||||
__u64 used_address;
|
__u64 used_address;
|
||||||
__u16 num;
|
__u16 num;
|
||||||
} __aligned(8);
|
} __attribute__ ((aligned(8)));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The alignment to use between consumer and producer parts of vring.
|
* The alignment to use between consumer and producer parts of vring.
|
||||||
|
@ -173,15 +168,13 @@ struct mic_vring {
|
||||||
int len;
|
int len;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define mic_aligned_desc_size(d) ALIGN(mic_desc_size(d), 8)
|
#define mic_aligned_desc_size(d) __mic_align(mic_desc_size(d), 8)
|
||||||
|
|
||||||
#ifndef INTEL_MIC_CARD
|
#ifndef INTEL_MIC_CARD
|
||||||
static inline unsigned mic_desc_size(const struct mic_device_desc *desc)
|
static inline unsigned mic_desc_size(const struct mic_device_desc *desc)
|
||||||
{
|
{
|
||||||
return mic_aligned_size(*desc)
|
return sizeof(*desc) + desc->num_vq * sizeof(struct mic_vqconfig)
|
||||||
+ desc->num_vq * mic_aligned_size(struct mic_vqconfig)
|
+ desc->feature_len * 2 + desc->config_len;
|
||||||
+ desc->feature_len * 2
|
|
||||||
+ desc->config_len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct mic_vqconfig *
|
static inline struct mic_vqconfig *
|
||||||
|
@ -201,8 +194,7 @@ static inline __u8 *mic_vq_configspace(const struct mic_device_desc *desc)
|
||||||
}
|
}
|
||||||
static inline unsigned mic_total_desc_size(struct mic_device_desc *desc)
|
static inline unsigned mic_total_desc_size(struct mic_device_desc *desc)
|
||||||
{
|
{
|
||||||
return mic_aligned_desc_size(desc) +
|
return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl);
|
||||||
mic_aligned_size(struct mic_device_ctrl);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue