aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mpr/mpr_user.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/mpr/mpr_user.c')
-rw-r--r--sys/dev/mpr/mpr_user.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/dev/mpr/mpr_user.c b/sys/dev/mpr/mpr_user.c
index cab865e2e535..08c2b8b39244 100644
--- a/sys/dev/mpr/mpr_user.c
+++ b/sys/dev/mpr/mpr_user.c
@@ -2266,6 +2266,10 @@ mpr_ioctl(struct cdev *dev, u_long cmd, void *arg, int flag,
mpr_unlock(sc);
break;
case MPRIO_READ_CFG_PAGE:
+ if (page_req->len < (int)sizeof(MPI2_CONFIG_PAGE_HEADER)) {
+ error = EINVAL;
+ break;
+ }
mpr_page = malloc(page_req->len, M_MPRUSER, M_WAITOK | M_ZERO);
error = copyin(page_req->buf, mpr_page,
sizeof(MPI2_CONFIG_PAGE_HEADER));
@@ -2284,6 +2288,11 @@ mpr_ioctl(struct cdev *dev, u_long cmd, void *arg, int flag,
mpr_unlock(sc);
break;
case MPRIO_READ_EXT_CFG_PAGE:
+ if (ext_page_req->len <
+ (int)sizeof(MPI2_CONFIG_EXTENDED_PAGE_HEADER)) {
+ error = EINVAL;
+ break;
+ }
mpr_page = malloc(ext_page_req->len, M_MPRUSER,
M_WAITOK | M_ZERO);
error = copyin(ext_page_req->buf, mpr_page,
@@ -2298,6 +2307,10 @@ mpr_ioctl(struct cdev *dev, u_long cmd, void *arg, int flag,
error = copyout(mpr_page, ext_page_req->buf, ext_page_req->len);
break;
case MPRIO_WRITE_CFG_PAGE:
+ if (page_req->len < (int)sizeof(MPI2_CONFIG_PAGE_HEADER)) {
+ error = EINVAL;
+ break;
+ }
mpr_page = malloc(page_req->len, M_MPRUSER, M_WAITOK|M_ZERO);
error = copyin(page_req->buf, mpr_page, page_req->len);
if (error)