Bug 240874

Summary: Linuxulator: unimplemented Linux syscalls: inotify_init{,1}
Product: Base System Reporter: Bjoern A. Zeeb <bz>
Component: kernAssignee: freebsd-emulation (Nobody) <emulation>
Status: Open ---    
Severity: Affects Only Me CC: arrowd, damjan.jov, dchagin, emaste, fernape, freebsd, kevans, osa, vedran
Priority: ---    
Version: CURRENT   
Hardware: amd64   
OS: Any   
Bug Depends on:    
Bug Blocks: 247219    

Description Bjoern A. Zeeb freebsd_committer freebsd_triage 2019-09-27 15:01:31 UTC
Hi,

is anyone working on implementing the following linux syscalls?

memfd_create()
inotify_init()
inotify_init1()

There's Linux binary-only software which seems to require it.
Comment 1 Kyle Evans freebsd_committer freebsd_triage 2019-09-28 00:08:29 UTC
(In reply to Bjoern A. Zeeb from comment #0)

Heh, we just implemented memfd_create in terms of shm_open2. I'll take a look at implementing the Linux syscall version- it should be fairly simple now that we implement everything it needs.
Comment 2 commit-hook freebsd_committer freebsd_triage 2020-06-29 03:09:55 UTC
A commit references this bug:

Author: kevans
Date: Mon Jun 29 03:09:16 UTC 2020
New revision: 362769
URL: https://svnweb.freebsd.org/changeset/base/362769

Log:
  linuxolator: implement memfd_create syscall

  This effectively mirrors our libc implementation, but with minor fudging --
  name needs to be copied in from userspace, so we just copy it straight into
  stack-allocated memfd_name into the correct position rather than allocating
  memory that needs to be cleaned up.

  The sealing-related fcntl(2) commands, F_GET_SEALS and F_ADD_SEALS, have
  also been implemented now that we support them.

  Note that this implementation is still not quite at feature parity w.r.t.
  the actual Linux version; some caveats, from my foggy memory:

  - Need to implement SHM_GROW_ON_WRITE, default for memfd (in progress)
  - LTP wants the memfd name exposed to fdescfs
  - Linux allows open() of an fdescfs fd with O_TRUNC to truncate after dup.
    (?)

  Interested parties can install and run LTP from ports (devel/linux-ltp) to
  confirm any fixes.

  PR:		240874
  Reviewed by:	kib, trasz
  Differential Revision:	https://reviews.freebsd.org/D21845

Changes:
  head/sys/amd64/linux/linux_dummy.c
  head/sys/amd64/linux32/linux32_dummy.c
  head/sys/arm64/linux/linux_dummy.c
  head/sys/compat/linux/linux.c
  head/sys/compat/linux/linux.h
  head/sys/compat/linux/linux_file.c
  head/sys/compat/linux/linux_file.h
  head/sys/i386/linux/linux_dummy.c
Comment 3 Gleb Popov freebsd_committer freebsd_triage 2023-02-15 09:36:06 UTC
I'm facing the problem as Bjoern. I have a closed source Linux binary that calls inotify_* functions.

We do have libinotify-kqueue - a usermode library that implements inotify interface in terms of kevent/kqueue one. However, there seem to be no way to easily hook it into Linuxulator, because inotify_* are syscalls on Linux.
Comment 4 Dmitry Chagin freebsd_committer freebsd_triage 2023-02-15 14:10:07 UTC
(In reply to Gleb Popov from comment #3)
(In reply to Gleb Popov from comment #3)
hmm, I'll take a look at the libinotify-kqueue library code, I suspected that it was not so easy to implement inotify* on top of the kqueue/kevent, however someone did it.
Could you please check 228115?
Comment 5 Fernando Apesteguía freebsd_committer freebsd_triage 2023-02-15 16:46:20 UTC
(In reply to Gleb Popov from comment #3)
Hi Gleb,

Did you try with the instructions at https://github.com/libinotify-kqueue/libinotify-kqueue under "Building under linuxolator (FreeBSD 13+)"?
Comment 6 Gleb Popov freebsd_committer freebsd_triage 2023-02-15 16:49:45 UTC
(In reply to Fernando Apesteguía from comment #5)
Oh, I didn't think the preloading trick will work for these functions. Thanks for the hint, I'll keep this in mind.
Comment 7 Damjan Jovanovic 2023-02-15 16:55:50 UTC
(In reply to Gleb Popov from comment #6)

Are you saying your app statically linked to libc, or makes direct inotify_* system calls without going through libc?
Comment 8 Gleb Popov freebsd_committer freebsd_triage 2023-02-15 17:01:49 UTC
(In reply to Damjan Jovanovic from comment #7)
Not sure about direct syscalls, but it is certainly linked to libc dynamically. I believe preloading is a way to go.
Comment 9 Vedran Miletic 2023-09-18 06:27:09 UTC
(In reply to Fernando Apesteguía from comment #5)
I see that libinotify is already Ports and available as a package. Would it be possible to also have something like linux-c7-libinotify so it is more easily installable?