Page MenuHomeFreeBSD

Preserve syscall flags for dynamically loaded syscalls

Authored by on Jul 13 2017, 12:38 AM.
Referenced Files
Unknown Object (File)
Tue, May 23, 8:24 PM
Unknown Object (File)
May 8 2023, 4:13 AM
Unknown Object (File)
May 4 2023, 10:39 PM
Unknown Object (File)
Mar 26 2023, 12:39 PM
Unknown Object (File)
Mar 18 2023, 8:11 AM
Unknown Object (File)
Mar 18 2023, 8:11 AM
Unknown Object (File)
Mar 5 2023, 4:52 AM
Unknown Object (File)
Feb 12 2023, 5:19 PM



Using the suite, the PosixMqueue.CapModeForked test was failing due to an ECAPMODE after calling kmq_notify(). On further inspection, the following code from sys/kern/uipc_mqueue.c initialized the dynamically loaded syscall entry with sy_flags zeroed out:

static struct syscall_helper_data mq_syscalls[] = {

Not sure if this is the right way to go about this, please let me know.

Diff Detail

Lint Skipped
Tests Skipped

Event Timeline

I think that the idea of the fix is sound, but technically I do not like it. Why sy_flags is copied from the bogus main syscall table into new sysent, while other fields are copied from the module-provided sysents ?

IMO what should be done is module sysent entries fixed to provide correct sy_flags. To achieve this, you might need to add e.g. SYSCALL_INIT_HELPER_F) macro which would take sy_flags argument in addition to the argument already taken by the SYSCALL_INIT_HELPER(), and initialize modules' syscall_helper_data tables with the correct flags.

Changed module syscall init helpers to initialize flags

Changed module syscall init helpers to initialize flags

This looks good. Two more notes:

  • compat32 helpers need same treatment
  • I suggest to add a comment to capabilities.conf around the affected syscalls so that it is clear that flags might come from other place
  • Added comment to sys/kern/capabilities.conf for more information on where the sysents are being initialized
  • Added flags to SYSCALL32 initializers
This revision is now accepted and ready to land.Jul 14 2017, 7:58 AM
This revision was automatically updated to reflect the committed changes.