PATCH: 2.6.7-rc3 drivers/scsi/megaraid.c: user/kernel pointer bugs
Subsystems (2)
Since arg is a user pointer, so are uioc_mimd and uiocp, and hence umc is a user pointer. Thus reading umc->xferaddr requires dereferencing a user pointer, which isn't safe. Let me know if you have any questions or I've made an error.
Best,
Rob
drivers/scsi/megaraid.c renamed from drivers/scsi/megaraid.c.orig +4 -2
@@ -3815,7 +3815,8 @@ mega_n_to_m(void *arg, megacmd_t *mc) umc =MBOX_P (uiocp); - upthru = (mega_passthru *)umc->xferaddr; +if (get_user (upthru, (mega_passthru **)&umc->xferaddr)) +return (-EFAULT );if (put_user (mc->status, (u8 *)&upthru->scsistatus) )return (-EFAULT );
@@ -3831,7 +3832,8 @@ mega_n_to_m(void *arg, megacmd_t *mc) umc = (megacmd_t *)uioc_mimd->mbox; - upthru = (mega_passthru *)umc->xferaddr; +if (get_user (upthru, (mega_passthru **)&umc->xferaddr)) +return (-EFAULT );if (put_user (mc->status, (u8 *)&upthru->scsistatus) )return (-EFAULT );
Quoted 4 lines · Robert T. Johnson
Since arg is a user pointer, so are
uioc_mimdand uiocp, and hence umc is a user pointer. Thus readingumc->xferaddrrequires dereferencing a user pointer, which isn't safe. Let me know if you have any questions or I've made an error.
ACK.