Prevent kernel stack disclosure in signal delivery
On arm64 and riscv platforms, sendsig() failed to zero the signal frame before copying it out to userspace. Zero it. On arm, I believe all the contents of the frame were initialized, so there was no disclosure. However, explicitly zero the whole frame because that fact could inadvertently change in the future, it's more clear to the reader, and I could be wrong in the first place. MFC after: 2 days Security: similar to FreeBSD-EN-18:12.mem and CVE-2018-17155 Sponsored by: Dell EMC Isilon
This commit is contained in:
parent
ca2c73670f
commit
3887aaa49b
@ -641,6 +641,7 @@ sendsig(catcher, ksi, mask)
|
||||
/* make the stack aligned */
|
||||
fp = (struct sigframe *)STACKALIGN(fp);
|
||||
/* Populate the siginfo frame. */
|
||||
bzero(&frame, sizeof(frame));
|
||||
get_mcontext(td, &frame.sf_uc.uc_mcontext, 0);
|
||||
#ifdef VFP
|
||||
get_vfpcontext(td, &frame.sf_vfp);
|
||||
|
@ -656,6 +656,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
fp = (struct sigframe *)STACKALIGN(fp);
|
||||
|
||||
/* Fill in the frame to copy out */
|
||||
bzero(&frame, sizeof(frame));
|
||||
get_mcontext(td, &frame.sf_uc.uc_mcontext, 0);
|
||||
get_fpcontext(td, &frame.sf_uc.uc_mcontext);
|
||||
frame.sf_si = ksi->ksi_info;
|
||||
|
@ -582,6 +582,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
fp = (struct sigframe *)STACKALIGN(fp);
|
||||
|
||||
/* Fill in the frame to copy out */
|
||||
bzero(&frame, sizeof(frame));
|
||||
get_mcontext(td, &frame.sf_uc.uc_mcontext, 0);
|
||||
get_fpcontext(td, &frame.sf_uc.uc_mcontext);
|
||||
frame.sf_si = ksi->ksi_info;
|
||||
|
Loading…
Reference in New Issue
Block a user