diff options
| author | Rich Felker <dalias@aerifal.cx> | 2015-09-23 18:33:49 +0000 |
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2015-09-23 18:33:49 +0000 |
| commit | b61df2294f662540786f2558f691eba7447ff5ba (patch) | |
| tree | 097e5fc922c4379fe7291f9381fa4fb0b79c1228 /arch/sh | |
| parent | fix dlsym RTLD_NEXT behavior for fdpic (diff) | |
| download | grovel-b61df2294f662540786f2558f691eba7447ff5ba.tar.gz grovel-b61df2294f662540786f2558f691eba7447ff5ba.tar.xz | |
fix signal return for sh/fdpic
the restorer function pointer provided in the kernel sigaction
structure is interpreted by the kernel as a raw code address, not a
function descriptor.
this commit moves the declarations of the __restore and __restore_rt
symbols to ksigaction.h so that arch versions of the file can override
them, and introduces a version for sh which declares them as objects
rather than functions.
an alternate solution would have been defining SA_RESTORER to 0 so
that the functions are not used, but this both requires executable
stack (since the sh kernel does not have a vdso page with permanent
restorer functions) and crashes on qemu user-level emulation.
Diffstat (limited to 'arch/sh')
| -rw-r--r-- | arch/sh/ksigaction.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/sh/ksigaction.h b/arch/sh/ksigaction.h new file mode 100644 index 00000000..0c652bea --- /dev/null +++ b/arch/sh/ksigaction.h @@ -0,0 +1,8 @@ +struct k_sigaction { + void (*handler)(int); + unsigned long flags; + void *restorer; + unsigned mask[2]; +}; + +extern unsigned char __restore[], __restore_rt[]; |
