@@ -88,6 +88,7 @@ register struct thread_info *__current_thread_info asm(QUOTED_THREADINFO_REG);
#define TIF_SIGPENDING 2 /* signal pending */
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
#define TIF_SINGLESTEP 4 /* restore ss @ return to usr mode */
+#define TIF_FD_SLOTS 5 /* syscall prepared descriptors */
#define TIF_RESTORE_SIGMASK 6 /* restore sig mask in do_signal() */
#define TIF_NOTIFY_SIGNAL 7 /* signal notifications exist */
/* true if poll_idle() is polling TIF_NEED_RESCHED */
@@ -98,6 +99,7 @@ register struct thread_info *__current_thread_info asm(QUOTED_THREADINFO_REG);
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
+#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS)
#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
/* work to do on interrupt/exception return - All but TIF_SYSCALL_TRACE */
@@ -6,6 +6,7 @@
*/
#include <linux/init.h>
+#include <linux/file.h>
#include <linux/sched/signal.h>
#include <linux/sched/debug.h>
#include <linux/sched/task_stack.h>
@@ -381,6 +382,9 @@ void do_trap0(struct pt_regs *regs)
regs->r04, regs->r05);
}
+ if (unlikely(test_thread_flag(TIF_FD_SLOTS)))
+ fd_slots_commit(regs);
+
/* allow strace to get the syscall return state */
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACE)))
ptrace_report_syscall_exit(regs, 0);
Add TIF_FD_SLOTS and test it in do_trap0() once the system call has returned, before the ptrace exit stop gets to see the result. Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org> --- arch/hexagon/include/asm/thread_info.h | 2 ++ arch/hexagon/kernel/traps.c | 4 ++++ 2 files changed, 6 insertions(+)