Commit 31a43fa7 authored by Kees Cook's avatar Kees Cook Committed by David S. Miller

sparc64: viohs: Remove VLA usage

In the quest to remove all stack VLA usage from the kernel[1], this
allocates a fixed size array for the maximum number of cookies and
adds a runtime sanity check.

[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1
RqZWA@mail.gmail.com
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent df58f37b
...@@ -180,11 +180,17 @@ static int send_dreg(struct vio_driver_state *vio) ...@@ -180,11 +180,17 @@ static int send_dreg(struct vio_driver_state *vio)
struct vio_dring_register pkt; struct vio_dring_register pkt;
char all[sizeof(struct vio_dring_register) + char all[sizeof(struct vio_dring_register) +
(sizeof(struct ldc_trans_cookie) * (sizeof(struct ldc_trans_cookie) *
dr->ncookies)]; VIO_MAX_RING_COOKIES)];
} u; } u;
size_t bytes = sizeof(struct vio_dring_register) +
(sizeof(struct ldc_trans_cookie) *
dr->ncookies);
int i; int i;
memset(&u, 0, sizeof(u)); if (WARN_ON(bytes > sizeof(u)))
return -EINVAL;
memset(&u, 0, bytes);
init_tag(&u.pkt.tag, VIO_TYPE_CTRL, VIO_SUBTYPE_INFO, VIO_DRING_REG); init_tag(&u.pkt.tag, VIO_TYPE_CTRL, VIO_SUBTYPE_INFO, VIO_DRING_REG);
u.pkt.dring_ident = 0; u.pkt.dring_ident = 0;
u.pkt.num_descr = dr->num_entries; u.pkt.num_descr = dr->num_entries;
...@@ -206,7 +212,7 @@ static int send_dreg(struct vio_driver_state *vio) ...@@ -206,7 +212,7 @@ static int send_dreg(struct vio_driver_state *vio)
(unsigned long long) u.pkt.cookies[i].cookie_size); (unsigned long long) u.pkt.cookies[i].cookie_size);
} }
return send_ctrl(vio, &u.pkt.tag, sizeof(u)); return send_ctrl(vio, &u.pkt.tag, bytes);
} }
static int send_rdx(struct vio_driver_state *vio) static int send_rdx(struct vio_driver_state *vio)
......
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