Skip to content

Commit 57fbb64

Browse files
committed
Fix multiple small kernel memory disclosures. [EN-18:04.mem]
Reported by: Ilja van Sprundel Approved by: so Security: CVE-2018-6919 Security: FreeBSD-EN-18:04.mem
1 parent 4b0e453 commit 57fbb64

File tree

7 files changed

+10
-7
lines changed

7 files changed

+10
-7
lines changed

sys/compat/svr4/svr4_misc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ svr4_sys_getdents64(td, uap)
260260
u_long *cookies = NULL, *cookiep;
261261
int ncookies;
262262

263+
memset(&svr4_dirent, 0, sizeof(svr4_dirent));
263264
DPRINTF(("svr4_sys_getdents64(%d, *, %d)\n",
264265
uap->fd, uap->nbytes));
265266
error = getvnode(td->td_proc->p_fd, uap->fd,

sys/dev/drm/drm_bufs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,7 @@ int drm_infobufs(struct drm_device *dev, void *data, struct drm_file *file_priv)
935935
if (dma->bufs[i].buf_count) {
936936
struct drm_buf_desc from;
937937

938+
memset(&from, 0, sizeof(from));
938939
from.count = dma->bufs[i].buf_count;
939940
from.size = dma->bufs[i].buf_size;
940941
from.low_mark = dma->bufs[i].freelist.low_mark;

sys/dev/drm/drm_irq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ int drm_modeset_ctl(struct drm_device *dev, void *data,
357357
goto out;
358358

359359
crtc = modeset->crtc;
360-
if (crtc >= dev->num_crtcs) {
360+
if (crtc < 0 || crtc >= dev->num_crtcs) {
361361
ret = EINVAL;
362362
goto out;
363363
}

sys/dev/hpt27xx/hpt27xx_osm_bsd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,7 +1402,7 @@ static int hpt_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, stru
14021402
{
14031403
PHPT_IOCTL_PARAM piop=(PHPT_IOCTL_PARAM)data;
14041404
IOCTL_ARG ioctl_args;
1405-
HPT_U32 bytesReturned;
1405+
HPT_U32 bytesReturned = 0;
14061406

14071407
switch (cmd){
14081408
case HPT_DO_IOCONTROL:
@@ -1432,7 +1432,7 @@ static int hpt_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, stru
14321432
}
14331433

14341434
if (ioctl_args.nOutBufferSize) {
1435-
ioctl_args.lpOutBuffer = malloc(ioctl_args.nOutBufferSize, M_DEVBUF, M_WAITOK);
1435+
ioctl_args.lpOutBuffer = malloc(ioctl_args.nOutBufferSize, M_DEVBUF, M_WAITOK | M_ZERO);
14361436
if (!ioctl_args.lpOutBuffer)
14371437
goto invalid;
14381438
}

sys/dev/hptnr/hptnr_osm_bsd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,7 +1584,7 @@ static int hpt_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, stru
15841584
{
15851585
PHPT_IOCTL_PARAM piop=(PHPT_IOCTL_PARAM)data;
15861586
IOCTL_ARG ioctl_args;
1587-
HPT_U32 bytesReturned;
1587+
HPT_U32 bytesReturned = 0;
15881588

15891589
switch (cmd){
15901590
case HPT_DO_IOCONTROL:
@@ -1614,7 +1614,7 @@ static int hpt_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, stru
16141614
}
16151615

16161616
if (ioctl_args.nOutBufferSize) {
1617-
ioctl_args.lpOutBuffer = malloc(ioctl_args.nOutBufferSize, M_DEVBUF, M_WAITOK);
1617+
ioctl_args.lpOutBuffer = malloc(ioctl_args.nOutBufferSize, M_DEVBUF, M_WAITOK | M_ZERO);
16181618
if (!ioctl_args.lpOutBuffer)
16191619
goto invalid;
16201620
}

sys/dev/hptrr/hptrr_osm_bsd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,7 +1231,7 @@ static int hpt_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, stru
12311231
{
12321232
PHPT_IOCTL_PARAM piop=(PHPT_IOCTL_PARAM)data;
12331233
IOCTL_ARG ioctl_args;
1234-
HPT_U32 bytesReturned;
1234+
HPT_U32 bytesReturned = 0;
12351235

12361236
switch (cmd){
12371237
case HPT_DO_IOCONTROL:
@@ -1261,7 +1261,7 @@ static int hpt_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, stru
12611261
}
12621262

12631263
if (ioctl_args.nOutBufferSize) {
1264-
ioctl_args.lpOutBuffer = malloc(ioctl_args.nOutBufferSize, M_DEVBUF, M_WAITOK);
1264+
ioctl_args.lpOutBuffer = malloc(ioctl_args.nOutBufferSize, M_DEVBUF, M_WAITOK | M_ZERO);
12651265
if (!ioctl_args.lpOutBuffer)
12661266
goto invalid;
12671267
}

sys/i386/ibcs2/ibcs2_misc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ ibcs2_getdents(td, uap)
352352
#define BSD_DIRENT(cp) ((struct dirent *)(cp))
353353
#define IBCS2_RECLEN(reclen) (reclen + sizeof(u_short))
354354

355+
memset(&idb, 0, sizeof(idb));
355356
error = getvnode(td->td_proc->p_fd, uap->fd,
356357
cap_rights_init(&rights, CAP_READ), &fp);
357358
if (error != 0)

0 commit comments

Comments
 (0)