sys/linux: Fix a few potential infoleaks in Linux IPC

Submitted by:	Domagoj Stolfa <domagoj.stolfa@gmail.com>
MFC After:	1 month
This commit is contained in:
Eitan Adler 2018-03-03 21:14:55 +00:00
parent 40301da899
commit 6eee883a17

View file

@ -548,6 +548,9 @@ linux_semctl(struct thread *td, struct linux_semctl_args *args)
register_t rval;
int cmd, error;
memset(&linux_seminfo, 0, sizeof(linux_seminfo));
memset(&linux_semid64, 0, sizeof(linux_semid64));
switch (args->cmd & ~LINUX_IPC_64) {
case LINUX_IPC_RMID:
cmd = IPC_RMID;
@ -702,12 +705,15 @@ linux_msgctl(struct thread *td, struct linux_msgctl_args *args)
struct l_msqid64_ds linux_msqid64;
struct msqid_ds bsd_msqid;
memset(&linux_msqid64, 0, sizeof(linux_msqid64));
bsd_cmd = args->cmd & ~LINUX_IPC_64;
switch (bsd_cmd) {
case LINUX_IPC_INFO:
case LINUX_MSG_INFO: {
struct l_msginfo linux_msginfo;
memset(&linux_msginfo, 0, sizeof(linux_msginfo));
/*
* XXX MSG_INFO uses the same data structure but returns different
* dynamic counters in msgpool, msgmap, and msgtql fields.
@ -833,6 +839,10 @@ linux_shmctl(struct thread *td, struct linux_shmctl_args *args)
struct shmid_ds bsd_shmid;
int error;
memset(&linux_shm_info, 0, sizeof(linux_shm_info));
memset(&linux_shmid64, 0, sizeof(linux_shmid64));
memset(&linux_shminfo64, 0, sizeof(linux_shminfo64));
switch (args->cmd & ~LINUX_IPC_64) {
case LINUX_IPC_INFO: {