Commit Graph

8734 Commits

Author SHA1 Message Date
Jakub Wilk 6a67ed89fc prctl.2: tfix
Remove duplicated word.

Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-25 15:46:44 +02:00
Michael Kerrisk 7996b4e48c gettid.2: Document header file and feature test macro requirements for gettid()
The gettid() wrapper was added glibc 2.30, and is declared by
<unistd.h> if _GNU_SOURCE is defined.

Reported-by: Joseph C. Sible <josephcsible@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-25 15:46:44 +02:00
Michael Kerrisk b0d3e315cc sysfs.2: SEE ALSO: add proc(5) and sysfs(5)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-21 15:20:27 +02:00
Michael Kerrisk 817d604ac5 nfsservctl.2: SEE ALSO: add nfsd(7)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-21 15:20:27 +02:00
Michael Kerrisk 07161ed5f2 sysfs.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-21 15:20:27 +02:00
Michael Kerrisk 4fe3acd9e1 clone.2: Note a performance benefit of CLONE_INTO_CGROUP
As noted in email by Christian Brauner:

    I forgot to mention that spawning directly into a target
    cgroup is also more efficient than moving it after creation.
    The specific reason is mentioned in the commit message
    [ef2c41cf38a], the write lock of the semaphore need not be
    taken in contrast to when it is moved afterwards. That
    implementation details is not that interesting but it might
    be interesting to know that it provides performance benefits
    in general.

Reported-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 21:41:08 +02:00
Michael Kerrisk b3041511b8 clone.2: Restructure text on CLONE_INTO_CGROUP use cases
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 21:24:55 +02:00
Michael Kerrisk 17d860301a clone.2: wfix
Reported-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 21:16:53 +02:00
Michael Kerrisk 673d16daad clone.2: Combine separate NOTES sections
Somewhere along the way, this page ended up with two NOTES
sections. Combine them.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:11 +02:00
Michael Kerrisk edc1b9fcd2 clone.2: Place CLONE_INTO_CGROUP text in correct alphabetical position
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:11 +02:00
Michael Kerrisk 6ba79da96e clone.2: ERRORS: add error cases for CLONE_INTO_CGROUP
These errors verified by experiment.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:11 +02:00
Michael Kerrisk ed7c137731 clone.2: Substantial reworking of Christian Brauner's CLONE_INTO_CGROUP text
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:11 +02:00
Michael Kerrisk f7d5e0822a clone.2: Add kernel version numbers for clone_args fields
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:11 +02:00
Michael Kerrisk 5c216c0f7f clone.2: Some rewording of Christian Brauner's CLONE_INTO_CGROUP patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:11 +02:00
Michael Kerrisk b19679f754 clone.2: srcfix: semantic newlines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:11 +02:00
Christian Brauner aed3cc90e0 clone.2: Document the clone3() CLONE_INTO_CGROUP flag
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:09 +02:00
Michael Kerrisk 81b8997f5f pipe.2, sigaltstack.2, abort.3, signal.7: Place SH sections in standard order
Fix various pages that deviated from the norm described in
man-pages(7).

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 15:45:01 +02:00
Michael Kerrisk e3a78ee965 adjtimex.2, prctl.2, semget.2, signalfd.2, umount.2, syscall.2, dlopen.3, getgrent_r.3, killpg.3: Add section number in page cross-reference (adjtime(3))
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 08:04:55 +02:00
Michael Kerrisk 9bfa575a6b sched_setattr.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 08:04:55 +02:00
Michael Kerrisk 3bf4529ec7 adjtimex.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 07:40:56 +02:00
Michael Kerrisk 74132c7775 adjtimex.2: Add 'clock_adjtime' to NAME
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 07:37:13 +02:00
Michael Kerrisk a36d5a3593 close.2, poll.2, pthread_spin_init.3: Remove section number in page self-references
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 07:34:38 +02:00
Michael Kerrisk 0345fbd451 utimensat.2: ffix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 07:27:03 +02:00
Michael Kerrisk c8fb1c6d4a gettid.2, open.2, seccomp.2, pthread_mutex_consistent.3, signal.7, xattr.7: Put SEE ALSO entries in alphabetical order
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-19 07:23:34 +02:00
Kir Kolyshkin bba4bbbd9a Various pages: Add missing commas in SEE ALSO part II
This is a sequel to commit baf17bc4f2, addressing the
issues with missing commas in the middle of SEE ALSO lists that
emerged since.

The awk script from the original commit was not working and had to
be slightly modified (s/["]SEE ALSO["]/"?SEE ALSO/), otherwise it
works like a charm. Here's the fixed script and its output just
before this commit:

for f in man*/*; do
awk '
    /^.SH "?SEE ALSO/ {
	sa=1; print "== " FILENAME " =="; print; next
    }
    /^\.(PP|SH)/ {
	sa=0; no=0; next
    }
    /^\.BR/ {
	if (sa==1) {
	    print;
	    if (no == 1)
		print "Missing comma in " FILENAME " +" FNR-1; no=0
	}
    }
    /^\.BR .*)$/ {
	if (sa==1)
	    no=1;
	next
    }
    /\.\\"/ {next}
    /.*/ {
	if (sa==1) {
	    print; next
	}
    }
' $f; done | grep Missing
Missing comma in man1/memusage.1 +272
Missing comma in man2/adjtimex.2 +597
Missing comma in man2/adjtimex.2 +598
Missing comma in man2/mkdir.2 +252
Missing comma in man2/sigaction.2 +1045
Missing comma in man2/sigaction.2 +1047
Missing comma in man3/mbsnrtowcs.3 +198
Missing comma in man3/ntp_gettime.3 +142
Missing comma in man3/strcmp.3 +219
Missing comma in man3/strtol.3 +302
Missing comma in man3/wcstombs.3 +120
Missing comma in man7/user_namespaces.7 +1378
Missing comma in man7/xattr.7 +198

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-18 21:37:48 +02:00
Michael Kerrisk 11b0b31a14 prctl.2: ffix
Reported-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 13:44:06 +02:00
Michael Kerrisk cd41e08cbf prctl.2: Soften Dave Martin's warning about the use of prctl()
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 13:37:45 +02:00
Dave Martin f7abc99cf9 prctl.2: Clarify the unsupported hardware case of EINVAL
prctls that are architecture-specific won't work on other
architectures, and arch-specific prctls that manipulate optional
hardware features likewise won't work if that hardware feature is
not present.

The established pattern seems to be to treat such prctls as if they
are unimplemented, when attempted on the wrong hardware.

Cover these cases with some generic weasel words in the closet
existing EINVAL clause.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:49:36 +02:00
Michael Kerrisk 49a88f5dec prctl.2: ffix to "Work around bogus constant "maxsig" in PR_SET_PDEATHSIG" patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:44:23 +02:00
Michael Kerrisk 230dd8d060 prctl.2: wfix to "prctl.2: Document removal of Intel MPX prctls" patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:41:31 +02:00
Michael Kerrisk 0841915dee prctl.2: tfix to "prctl.2: Add health warning" patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:37:58 +02:00
Dave Martin e6935958b7 prctl.2: tfix: minor punctuation in SPECULATION_CTRL prctls
Fix a few very minor bits of punctuation in
PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:34:28 +02:00
Dave Martin bfc592db67 prctl.2: Work around bogus constant "maxsig" in PR_SET_PDEATHSIG
The description of PR_SET_PDEATHSIG refers to "maxsig", which
is apparently intended to stand for the maximum defined signal
number.

maxsig seems not to be a thing, even in the kernel.

Reword to use the standard constant NSIG.  (Discussion of SIGRTMIN
and SIGRTMAX seems out of scope here, and anyway is not relevant
to the kernel.)

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:34:13 +02:00
Dave Martin 2ab5fe267f prctl.2: Document removal of Intel MPX prctls
The Intel MPX API was removed from Linux 5.4.  See Linux
commit f240652b6032 ("x86/mpx: Remove MPX APIs")

Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:34:02 +02:00
Dave Martin 194ccff9cc prctl.2: Sort prctls into alphabetical order
The prctl list has historically been sorted by prctl name (ignoring
any SET_ or GET_ prefix) to make individual prctls easier to find.
Some noise seems to have crept in since.

Sort the list back into order.  Similarly, reorder the list of
prctls specified to return non-zero values on success.

Content movement only.  No semantic change.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:33:53 +02:00
Dave Martin 667eb3ac39 prctl.2: srcfix: add comments for navigation
The prctl.2 source is unnecessarily hard to navigate, not least
because prctl option flags are traditionally named PR_* and so look
just like prctl names.

For each actual prctl, add a comment of the form

	.\" prctl PR_FOO

to make it move obvious where each top-level prctl starts.

Of course, we could add some clever macros, but let's not confuse
dumb parsers.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:33:45 +02:00
Dave Martin ec5cb536b1 prctl.2: Add health warning
In reality, almost every prctl interferes with assumptions that the
compiler and C library / runtime rely on.  prctl() can therefore
make userspace explode in a variety ways that are likely to be hard
to debug.

This is not obvious to the uninitiated, so add a warning.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:32:50 +02:00
Dave Martin 5aaf1385fb prctl.2: Fix mis-description of thread ID values in procfs
Under PR_SET_NAME, the [tid] value seen in procfs as
/proc/self/task/[tid] is mistakenly described as the name of the
thread, whereas really the name is on /proc/self/task/[tid]/comm.

Fix it.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:32:40 +02:00
Dave Martin 1e0d99b899 prctl.2: Clarify that prctl can apply to threads
The current synopsis for prctl(2) misleadingly claims that prctl
operates on a process.  Rather, some (in fact, most) prctls operate
on a thread.

The wording probably dates back to the old days when Linux didn't
really have threads at all.

Reword as appropriate.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-13 12:32:32 +02:00
Michael Kerrisk 3f1dc8e16a stat.2: Minor reworking of text describing AT_NO_AUTOMOUNT
No content changes. Just put things in a slightly more logical
order and add a few paragraph breaks for readability.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-12 11:35:35 +02:00
Michael Kerrisk 4146f81b7d open.2: Some '*at' APIs have functionality that isn't in conventional APIs
Note that another reason to use the *at() APIs is to access
'flags' functionality that is not available in the corresponding
conventional APIs.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-12 09:43:01 +02:00
Michael Kerrisk 4d989e3563 stat.2: wfix ("it" used with two different referents in same sentence)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-12 09:42:56 +02:00
Michael Kerrisk 96c44b8f50 open.2: Explain ways in which a 'directory file descriptor' can be obtained
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-12 08:45:06 +02:00
Michael Kerrisk aec13430b1 open.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-12 08:03:52 +02:00
Michael Kerrisk 5c30e7cd9d open.2: Add a few more APIs to list in "Rationale for openat()..."
There have been a few more dirfd APIs added in recent times.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-12 07:43:41 +02:00
Michael Kerrisk c2f15a1349 close.2: Note behavior when close() happens in a parallel thread
If one thread is blocked in an I/O system call on a file descriptor
that is closed in another thread, then the blocking system call
does not return immediately, but rather when the I/O operation
completes. This surprises some people, but is longstanding
behavior.

See https://bugzilla.kernel.org/show_bug.cgi?id=53781

and

https://lore.kernel.org/lkml/3B1E3D86.C7A7874@canal-plus.fr/
To: linux-kernel@vger.kernel.org
Subject: PROBLEM: I/O system call never returns if file desc is closed in the  meantime
Date: Wed, 06 Jun 2001 16:26:14 +0200

Examples where people are surprised by this behavior:
https://www.linuxquestions.org/questions/linux-networking-3/recv-is-not-coming-out-of-blocking-after-closing-the-socket-459461/
https://stackoverflow.com/questions/3589723/can-a-socket-be-closed-from-another-thread-when-a-send-recv-on-the-same-socket

Reported-by: Thierry Lelegard <thierry.lelegard@canal-plus.fr>
Reported-by: Lukas Czerner <lczerner@redhat.com>
Reported-by: Peter Schiffer <pschiffe@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-09 13:24:39 +02:00
Dave Martin 3862672084 syscall.2: arm64: Fix syscall number register size
arm64 is currently documented as receiving the syscall number in
x8.

While this is the correct register, the syscall number is a 32-bit
integer.  Bits [63:32] are ignored by the kernel.

So it is more correct to say "w8".

Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-06 12:14:18 +02:00
Dave Martin f13396bc2d syscall.2: arm: Use real register names for arm/OABI
The arm OABI syscall interface is currently documented in terms of
register name aliases defined by the ARM Procedure Call Standard
(APCS).  However, these don't make sense in the context of a
binary interface that doesn't comply (or need to comply) with
APCS.

Use the real architectural register names instead.

The names a1-a4, v1... are just aliases for r0-r3, r4... anyway,
so the interface is just the same regardless of which set of names
is used.

Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-06 12:03:22 +02:00
Michael Kerrisk 3bd3ade0aa copy_file_range.2: tfix
There are 2 typos:
file_in is used instead of fd_in in the ERRORS and NOTES sections.
file_out is used instead of fd_out in the ERRORS section.

Reported-by: Ricardo Castano <ricardo.castano.salinas@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-05-04 10:29:01 +02:00
Nikola Forró bdc01e533e execve.2: Clarify signal sent to the process on late failure
Signed-off-by: Nikola Forró <nforro@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-29 21:50:22 +02:00
Michael Kerrisk 9e91819909 statfs.2: Add SMB2 constant to filesystem types list
Reported-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-29 21:50:09 +02:00
Michael Kerrisk d8e46424aa wait4.2: Update wait3() feature test macro requirements for changes in glibc 2.26
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-29 21:31:30 +02:00
Michael Kerrisk 20b82882f3 poll.2: srcfix: add pointer to Austin bug where ppoll() is proposed for POSIX
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-29 13:54:13 +02:00
Michael Kerrisk c6364a1b33 io_cancel.2, io_destroy.2, io_getevents.2, io_setup.2, io_submit.2: Change uses of aio_context_t to io_context_t
Reported-by: Andi Kleen <andi@firstfloor.org>
Reported-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-25 09:02:18 +02:00
Michael Kerrisk 97caa19c41 prctl.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-24 21:53:10 +02:00
Michael Kerrisk 3daa240eae fanotify_mark.2: ffix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-23 14:46:41 +02:00
Michael Kerrisk 01ab9e6753 fanotify_mark.2: Remove mention of FAN_Q_OVERFLOW as an input value in 'mask'
See https://bugzilla.kernel.org/show_bug.cgi?id=198569.

Reported-by: Alexander Morozov <alexandermv@gmail.com>
Reported-by: Amir Goldstein <amir73il@gmail.com>
Reported-by: Jan Kara <jack@suse.cz>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-23 14:31:27 +02:00
Michael Kerrisk a47ce0632c mremap.2: Describe some use cases for MREMAP_DONTUNMAP
Reported-by: Brian Geffon <bgeffon@google.com>
Reported-by: Lokesh Gidra <lokeshgidra@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-22 14:04:58 +02:00
Michael Kerrisk 0367239919 mremap.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-22 13:49:21 +02:00
Jakub Wilk 3076b3d996 prctl.2: tfix
Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-22 13:12:46 +02:00
Michael Kerrisk 34aeffa286 open.2: ffix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 20:51:58 +02:00
Michael Kerrisk 510adbed8e open.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 16:31:23 +02:00
Michael Kerrisk e64c566c57 open.2: Add openat2() to list of APIs that take a 'dirfd' argument
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 16:26:51 +02:00
Michael Kerrisk d4492caac0 prctl.2: Minor wording fix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 14:01:01 +02:00
Michael Kerrisk 95818f493c execve.2: Minor rewording
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 13:37:39 +02:00
Michael Kerrisk bf85b5e63a execve.2: Changes to the "dumpable" flag may change ownership of /proc/PID files
Reported-by: Eric Hopper <hopper@omnifarious.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 13:10:06 +02:00
Michael Kerrisk 279aae0369 execve.2: SEE ALSO: add capabilities(7)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 13:05:40 +02:00
Michael Kerrisk 3a30f19ce8 execve.2: Improve/correct discussion of changes to dumpable flag during execve(2)
The details were not quite accurate. Defer to prctl(2)
for the more complete picture.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 13:05:40 +02:00
Michael Kerrisk afdfa65ba6 setpgid.2: srcfix
Reported-by: Jakub Wilk <jwilk@jwilk.net>
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-21 11:18:58 +02:00
Michael Kerrisk 81daa1727d fanotify_mark.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 21:28:37 +02:00
Michael Kerrisk 3af8449062 fanotify_mark.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 21:23:22 +02:00
Amir Goldstein a93e5c9593 fanotify.7, fanotify_mark.2: Document FAN_DIR_MODIFY
Document the details of the new FAN_DIR_MODIFY event, which
introduces entry name information to the fanotify event
reporting format.

Enhance the fanotify_fid.c example to also report this event.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Matthew Bobrowski <mbobrowski@mbobrowski.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 21:22:09 +02:00
Amir Goldstein 1f20a88032 fanotify_mark.2: Clarification about FAN_EVENT_ON_CHILD and new events
Some of the new event types that were added in v5.1 along with
init flag FAN_REPORT_FID are not eligible for reporting to a
directory watching with FAN_EVENT_ON_CHILD.

Document the events that cannot be generated on children of a
watching parent.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Matthew Bobrowski <mbobrowski@mbobrowski.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 21:21:49 +02:00
Amir Goldstein d71c9b4a5c fanotify_mark.2: Clarification about FAN_MARK_MOUNT and FAN_REPORT_FID
It is not true that FAN_MARK_MOUNT cannot be used with a group
that was initialized with flag FAN_REPORT_FID.

The correct assertion is that events that require a group with
flag FAN_REPORT_FID cannot be requested on a mark mount.

For exaple, a FAN_OPEN event can be requested on a mark mount and
will generate an event with file handle information if the group
was initialized with flag FAN_REPORT_FID.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Matthew Bobrowski <mbobrowski@mbobrowski.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 21:21:20 +02:00
Jakub Wilk 488d9e3101 adjtimex.2: tfix
Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 20:32:53 +02:00
Michael Kerrisk c11e258bc8 ioctl_fslabel.2: Minor tweaks to Eric Sandeen's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 14:43:29 +02:00
Michael Kerrisk 407dd5e4cd ioctl.2: SEE ALSO: add ioctl_fslabel(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 14:40:09 +02:00
Eric Sandeen bcdf6f9c2a ioctl_fslabel.2: New page documenting filesystem get/set label ioctl(2) operations
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 14:38:53 +02:00
Michael Kerrisk 3a77fea522 adjtimex.2: Minor tweaks to patch by Arnd Bergmann / Richard Cochran
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 13:06:16 +02:00
Michael Kerrisk 4952e654c4 adjtimex.2: srcfix: semantic newlines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 13:01:43 +02:00
Arnd Bergmann 7c880414c4 clock_adjtime.2: New link to adjtimex(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 13:00:23 +02:00
Arnd Bergmann 1ebc1dbaa1 adjtimex.2: Document clock_adjtime(2)
I was experimenting with some possible changes to adjtimex(2) and
clock_adjtime(2) and tried to look up the man page to see what the
documented behavior is when I noticed that clock_adjtime() appears
to be the only system call that is currently undocumented.

Before I do any changes to it, this tries to document what I
understand it currently does.

[ RC: Add better explanations of the usage and error codes
  and correct some typographical mistakes. ]

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 13:00:23 +02:00
Michael Kerrisk bd72f280c9 clock_getres.2: Tweaks to Richard Cochran's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 12:57:02 +02:00
Michael Kerrisk aab942127b clock_getres.2: srcfix: semantic newlines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 12:47:42 +02:00
Richard Cochran f377393edd clock_getres.2: Explain dynamic clocks
Linux has allowed passing open file descriptors to clock_gettime()
and friends since v2.6.39.  This patch documents these "dynamic"
clocks and adds a brief example of how to use them.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 12:45:58 +02:00
Michael Kerrisk 47bb592129 statfs.2: wfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 10:04:58 +02:00
Michael Kerrisk 8668f5a176 mremap.2: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-20 00:10:27 +02:00
Michael Kerrisk cdc3f1ea04 mlock.2: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 23:27:43 +02:00
Michael Kerrisk cbeaa70fb0 nice.2: wfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 22:22:32 +02:00
Michael Kerrisk a3d4007cc6 pipe.2, st.4, filesystems.5: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 22:17:03 +02:00
Michael Kerrisk 47787557b8 rename.2: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 22:11:55 +02:00
Michael Kerrisk 15a75ea7ca fcntl.2: wfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 22:05:49 +02:00
Michael Kerrisk 923fda7a03 personality.2: wfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 22:03:46 +02:00
Michael Kerrisk fb018a235d execve.2: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 22:01:08 +02:00
Michael Kerrisk 53dcd8d262 open.2: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 21:59:43 +02:00
Michael Kerrisk 11af606752 mknod.2: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 21:54:00 +02:00
Michael Kerrisk c81bddf8e8 rename.2: tfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 21:43:36 +02:00
Michael Kerrisk 0613b79aa6 swapon.2: wfix
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-19 21:39:14 +02:00
Kirill Smelkov 90fb5f5225 mmap.2: srcfix: note kernel commit that caused MAP_POPULATE | MAP_NONBLOCK to be noop
Signed-off-by: Kirill Smelkov <kirr@nexedi.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-17 13:24:48 +02:00
Peter Wu 0e86195223 bpf.2: Update enum bpf_map_type and enum bpf_prog_type
Taken from Linux v5.3-rc2. Add a reference to the header file to
save the future reader some time figuring out whether more entries
exist.

Signed-off-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-17 12:08:10 +02:00
Michael Kerrisk f7d706ba9b bpf.2: srcfix: Add a note on check for unprivileged BPF_PROG_TYPE_SOCKET_FILTER programs
In Linux 4.4, the allowed BPF helper functions that could
be called was governed by a check in sk_filter_func_proto().
Nowadays (Linux 5.6), it is I think governed by the check in
sk_filter_func_proto().

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-17 11:58:35 +02:00
Michael Kerrisk 35732aa7a0 bpf.2: Minor tweaks to Richard Palethorpe's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-17 11:49:42 +02:00
Richard Palethorpe 821bf91cf6 bpf.2: Change note on unprivileged access
This notes that the kernel now allows calls to bpf() without CAP_SYS_ADMIN
under some circumstances.

Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-17 09:27:32 +02:00
Michael Kerrisk 2a2b2a5dd7 clone.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-17 09:06:20 +02:00
Michael Kerrisk d407f83e5f move_pages.2: Minor tweaks to Yang Shi's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 13:34:39 +02:00
Yang Shi e7b72190bb move_pages.2: Returning positive value is a new error case
Since commit a49bd4d71637 ("mm, numa: rework do_pages_move"), the
semantic of move_pages() has changed to return the number of
non-migrated pages if they were result of a non-fatal reasons
(usually a busy page).  This was an unintentional change that
hasn't been noticed except for LTP tests which checked for the
documented behavior.

There are two ways to go around this change.  We can even get back
to the original behavior and return -EAGAIN whenever migrate_pages
is not able to migrate pages due to non-fatal reasons.  Another
option would be to simply continue with the changed semantic and
extend move_pages documentation to clarify that -errno is returned
on an invalid input or when migration simply cannot succeed (e.g.
-ENOMEM, -EBUSY) or the number of pages that couldn't have been
migrated due to ephemeral reasons (e.g. page is pinned or locked
for other reasons).

We decided to keep the second option in kernel because this
behavior is in place for some time without anybody complaining and
possibly new users depending on it.  Also it allows to have a
slightly easier error handling as the caller knows that it is
worth to retry when err > 0.

Update man pages to reflect the new semantic.

Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Michael Kerrisk <mtk.manpages@gmail.com>
Signed-off-by: Yang Shi <yang.shi@linux.alibaba.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 13:30:02 +02:00
Michael Kerrisk 34451e6ee4 s390_runtime_instr.2: Various reworking of Heiko Carstens's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 12:30:00 +02:00
Michael Kerrisk fee6e6795e s390_runtime_instr.2: srcfix: rewrap long source lines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 12:18:19 +02:00
Heiko Carstens cca27058b7 s390_runtime_instr.2: Document signum argument behavior change
Document that the signum argument is ignored in newer kernels, but
that user space should pass a valid real-time signal number for
backwards compatibility.

Cowritten-by: Eugene Syromyatnikov <evgsyr@gmail.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Eugene Syromyatnikov <evgsyr@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 12:10:07 +02:00
Michael Kerrisk bff15b74e0 msgctl.2: Correct description of 'msg_ctime' field
Verified by inspecting kernel source.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 11:48:08 +02:00
Michael Kerrisk 6cd15a0567 shmctl.2: f
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 11:47:16 +02:00
Michael Kerrisk a85bc85d5d shmctl.2: Correct 'shm_ctime' description
Verified from kernel sources.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 11:41:47 +02:00
Michael Kerrisk 5fd4345e84 semctl.2: Correct description of sem_ctime field
Verified from inspection of kernel source code.

Reported-by: Manfred Spraul <manfred@colorfullife.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 11:33:17 +02:00
Michael Kerrisk 6fea5f4f1d semctl.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 11:27:19 +02:00
Michael Kerrisk 191dd3b238 mremap.2: Remove mention of "Segmentation fault" in EFAULT text
"Segmentation fault" (SIGSEGV) is not exactly the same thing as
EFAULT.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 08:23:09 +02:00
Michael Kerrisk 4737f0d145 mremap.2: Move a paragraph on MREMAP_DONTUNMAP from NOTES to DESCRIPTION
I think things read slightly easier, if all of the info on
MREMAP_DONTUNMAP is in one place.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 08:21:30 +02:00
Michael Kerrisk f15e32e3b9 mremap.2: Move a paragraph from DESCRIPTION to NOTES
The paragraph on Linux VM is rather generic, and does not belong
in DESCRIPTION. In fact, I'm not sure it even belongs in this
page.  At the least, let's move it to NOTES.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 08:20:12 +02:00
Michael Kerrisk 8c97c565ee mremap.2: Move a paragraph from DESCRIPTION to NOTES
And while we are at it, remove a sentence that makes an obvious
point (that mremap() uses the Linux page table scheme).

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 08:20:12 +02:00
Michael Kerrisk 2b4fecb9f6 mremap.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 08:20:12 +02:00
Michael Kerrisk 6af75e77bb mremap.2: Reorder some paragraphs in NOTES
Details of glibc 2.4, which is by now fairly old, would be
better at the end of NOTES than at the start.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 08:20:12 +02:00
Michael Kerrisk 0f0993c9b5 mremap.2: Some more improvements to Brian Geffon's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 08:20:01 +02:00
Michael Kerrisk 452bdc2f02 mremap.2: Minor tweaks to Brian Geffon's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 07:30:00 +02:00
Brian Geffon 8debc4f595 mremap.2: Document MREMAP_DONTUNMAP
Signed-off-by: Brian Geffon <bgeffon@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 07:30:00 +02:00
Michael Kerrisk cb76d6e5fe mremap.2: ffix (Add a paragraph break)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-16 07:30:00 +02:00
Michael Kerrisk 2932c4aa7e openat2.2: A few more fixes after feedback from Aleksa Sarai
Reported-by: Aleksa Sarai <cyphar@cyphar.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 22:07:39 +02:00
Michael Kerrisk 9154da7f05 mmap.2: Don't mark MAP_ANON as deprecated
From a mailing list conversation:

On 5/24/18 9:03 PM, Heinrich Schuchardt wrote:
> Hello Michael,
>
> in the mmap(2) man page MAP_ANON is described as deprecated.
>
> When I look at the NetBSD manpage
> http://netbsd.gw.com/cgi-bin/man-cgi?mmap+2+NetBSD-current
> I found that MAP_ANONYMOUS is not defined.
>
> https://www.dragonflybsd.org/cgi/web-man?command=mmap&section=2
> indicates MAP_ANONYMOUS is an alias for MAP_ANON and is provided for
> compatibility.
>
> https://man.openbsd.org/mmap.2 also knows MAP_ANONYMOUS as a synonym.
>
> https://www.unix.com/man-page/osx/2/mmap/ does not know MAP_ANONYMOUS.
>
> So shouldn't the man page indicate that MAP_ANON is to be favored to
> write portable code? And correspondingly mark MAP_ANONYMOUS as synonym
> only kept for compatibility.
>
> The Open Group Base Specifications Issue 7, 2018 Edition does not
> reference either of both. So both values are not POSIX but it is not
> correct to describe them as Linux only.

The text saying that MAP_ANON is deprecated is ancient (at least
20 years old). I don't know why that text was added.

Things are not simple though: it looks like there's at least
one historical implementation (HP-US) that defines MAP_ANONYMOUS
but not MAP_ANON.

I've applied the patch below.

Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 21:14:12 +02:00
Michael Kerrisk ebf3a7d52a ioctl_list.2: Remove hex values from constants
As noted by Heinrich Schuchardt:

he list contains hex values of different constants. I just wonder for
which architecture (alpha, i386, mips, or sparc at that time). No
information is supplied.

Current values depend on the architecture, e.g.

On amd64
0x82307201      VFAT_IOCTL_READDIR_BOTH
0x82307202      VFAT_IOCTL_READDIR_SHORT
0x80047210      FAT_IOCTL_GET_ATTRIBUTES
0x40047211      FAT_IOCTL_SET_ATTRIBUTES
0x80047213      FAT_IOCTL_GET_VOLUME_ID

On mips
0x42187201      VFAT_IOCTL_READDIR_BOTH
0x42187202      VFAT_IOCTL_READDIR_SHORT
0x40047210      FAT_IOCTL_GET_ATTRIBUTES
0x80047211      FAT_IOCTL_SET_ATTRIBUTES
0x40047213      FAT_IOCTL_GET_VOLUME_ID

Hence hex values should be removed.

Reported-by:
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 13:06:24 +02:00
Michael Kerrisk dfa3ae9b3f getdents.2: Tweaks to Petr Vorel's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 11:42:21 +02:00
Petr Vorel f5f6969dee getdents.2: Mention glibc support for getdents64()
Support was added in glibc 2.30.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 11:38:39 +02:00
Chris Lamb 15a8a16b8e getdents.2: Correct linux_dirent definition in example code
It is "unsigned long" earlier up in the file

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 11:36:51 +02:00
Goldwyn Rodrigues 1083ffb4cb utimensat: Immutable flag returns EPERM
Linux kernel commit 337684a1746f "fs: return EPERM on immutable
inode" changed (nd unified the return value of the utimensat(2)
from -EACCES to -EPERM in case of an immutable flag. Modify the
man page to reflect the same.

The entire discussion of returning the correct return value is at:
http://lists.linux.it/pipermail/ltp/2017-January/003424.html

[mtk: The change was in Linux 4.8]

Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 10:38:58 +02:00
Michael Kerrisk d7695b17b1 arch_prctl.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-14 08:36:07 +02:00
Michael Kerrisk d9e7db1b39 open.2: Tweaks to Joseph Sible's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 12:27:48 +02:00
Joseph C. Sible 2ddf885a4f open.2: Document fs.protected_fifos and fs.protected_regular
The sysctls fs.protected_fifos and fs.protected_regular can cause
open(2) to fail with EACCES (see Documentation/sysctl/fs.rst for
details.)

Signed-off-by: Joseph C. Sible <josephcsible@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 12:27:48 +02:00
Michael Kerrisk 43c257eaf3 io_setup.2: Tweak description of /proc/sys/fs/aio-max-nr
As far as I can see, /proc/sys/fs/aio-max-nr is a
system-wide limit, not a per-user limit. This seems to be
confirmed by comments in fs/aio.c (Linux 5.6) sources).

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 12:27:48 +02:00
Michael Kerrisk 10e29c059b sendfile.2: wfix
Reported-by: Joseph C. Sible <josephcsible@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 12:27:47 +02:00
Michael Kerrisk 731192bee0 ptrace.2: srcfix: mention strace's linux/*/set_scno.c files in relation to PTRACE_SET_SYSCALL
Reported-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 12:27:47 +02:00
Michael Kerrisk cbda5fc9de ptrace.2: Minor tweaks to Joseph Sible's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 12:27:44 +02:00
Joseph C. Sible c2254484e3 ptrace.2: Document PTRACE_SET_SYSCALL
Signed-off-by: Joseph C. Sible <josephcsible@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 10:29:03 +02:00
Michael Kerrisk d31cdf430e openat2.2: Various changes after feedback from Aleksa Sarai
Reported-by: Aleksa Sarai <cyphar@cyphar.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-13 09:21:20 +02:00
Michael Kerrisk 8e79683820 mbind.2: Rework Li Xinhai's patch to note historical behavior
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-12 09:35:41 +02:00
Li Xinhai dfbaab2f19 mbind.2: Remove note about MPOL_MF_STRICT been ignored
Current code ignores the MPOL_MF_STRICT when handling hugetlb
mapping, now patch([1]) handles MPOL_MF_STRICT in same semantic as
other mapping.  So, we can remove the note about 'MPOL_MF_STRICT
is ignored on huge page mappings', and no changes to other part of
man-page.

[1] https://lore.kernel.org/linux-mm/1581559627-6206-1-git-send-email-lixinhai.lxh@gmail.com/

Signed-off-by: Li Xinhai <lixinhai.lxh@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-12 09:35:41 +02:00
Michael Kerrisk 1a576c5858 shmop.2: Add license to example programs
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-12 09:11:20 +02:00
Michael Kerrisk 78391fde75 poll.2: Add license to example program
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-12 09:11:20 +02:00
Michael Kerrisk 927e2764ab semget.2: Add license to example program
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-12 09:11:16 +02:00
Michael Kerrisk 8678102abe pidfd_getfd.2, select.2, exit.3, time.7, time_namespaces.7: srcfix: Trim trailing white spaces
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-11 22:33:10 +02:00
Michael Kerrisk e8426ca2b4 getent.1, localedef.1, accept.2, arch_prctl.2, clock_getres.2, clock_nanosleep.2, connect.2, dup.2, epoll_create.2, epoll_ctl.2, epoll_wait.2, execve.2, getitimer.2, getsockopt.2, gettid.2, inotify_add_watch.2, inotify_init.2, io_submit.2, ioctl.2, lseek.2, madvise.2, mlock.2, mmap.2, mprotect.2, msgctl.2, msgop.2, open_by_handle_at.2, openat2.2, pidfd_open.2, poll.2, prctl.2, quotactl.2, s390_sthyi.2, select.2, select_tut.2, semctl.2, semget.2, semop.2, setns.2, shmctl.2, shmget.2, shmop.2, sigaction.2, stat.2, statx.2, syscalls.2, timer_create.2, timerfd_create.2, unshare.2, wait.2, CPU_SET.3, aio_init.3, atoi.3, des_crypt.3, dirfd.3, fmemopen.3, fopencookie.3, ftok.3, fts.3, getaddrinfo.3, getifaddrs.3, getrpcent.3, gsignal.3, lio_listio.3, nl_langinfo.3, posix_memalign.3, posix_openpt.3, posix_spawn.3, scanf.3, sem_init.3, sem_post.3, shm_open.3, strcmp.3, strftime.3, st.4, elf.5, group.5, proc.5, services.5, aio.7, cgroups.7, feature_test_macros.7, keyrings.7, man-pages.7, namespaces.7, path_resolution.7, sigevent.7, signal.7, socket.7, sysvipc.7, time.7, udp.7: tstamp
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-11 22:07:24 +02:00
Michael Kerrisk 68220f1c6a clock_getres.2: SEE ALSO: add time_namespaces(7)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-11 21:38:07 +02:00
Michael Kerrisk 97460df5f6 setns.2: Document CLONE_NEWTIME
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-11 21:38:07 +02:00
Michael Kerrisk beb5a76eb3 unshare.2: Add CLONE_NEWCGROUP and CLONE_NEWTIME to example program
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-11 21:38:07 +02:00
Michael Kerrisk e5a5efc8ba unshare.2: Document CLONE_NEWTIME
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-11 21:38:07 +02:00
Michael Kerrisk efbd39dfd8 dup.2: SEE ALSO: add pidfd_getfd(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 10:14:29 +02:00
Michael Kerrisk 6e91d3e290 pidfd_open.2: Mention pidfd_getfd(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 10:14:29 +02:00
Michael Kerrisk 8b4baee738 pidfd_getfd.2: Additions and fixes after review by Christian Brauner
Reported-by: Christian Brauner <christian@brauner.io>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 10:14:29 +02:00
Michael Kerrisk be04cb5051 pidfd_getfd.2: Note the parallels and differences with SCM_RIGHTS messages
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 10:14:29 +02:00
Michael Kerrisk 13aa2b3014 pidfd_getfd.2: New manual page documenting the pidfd_getfd() system call
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 10:14:29 +02:00
Julia Suvorova af23877392 io_submit.2: Add IOCB_CMD_POLL opcode
A new feature of one-shoot polling through io_submit was
introduced in bfe4037e722ec commit. Keep things up-to-date due
to changes in linux/aio_abi.h.

Signed-off-by: Julia Suvorova <jusual@mail.ru>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Zack Weinberg d128b5b7ee sigaction.2, signal.7: Document kernel bugs in delivery of signals from CPU exceptions
signal.7: Which signal is delivered in response to a CPU exception
is under-documented and does not always make sense.  See
<https://bugzilla.kernel.org/show_bug.cgi?id=205831> for an
example where it doesn’t make sense; per the discussion there,
this cannot be changed because of backward compatibility concerns,
so let’s instead document the problem.

sigaction.2: For related reasons, the kernel doesn’t always fill
in all of the fields of the siginfo_t when delivering signals from
CPU exceptions.  Document this as well.  I imagine this one
_could_ be fixed, but the problem would still be relevant to
anyone using an older kernel.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Michael Kerrisk 9b89b9dd7a fanotify_mark.2: wfix
After a comment from Matthew Bobrowski:

    Although, I would just have to point out that it doesn't
    necessarily have to be a "script" file, but rather a file of
    any type that can have its contents interpreted, which then
    results in a form of program execution i.e.

    $ /usr/lib64/ld-linux-x86-64.so.2 ./foo

    In this case, foo is not a "script" file.

Reported-by: Matthew Bobrowski <mbobrowski@mbobrowski.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Michael Kerrisk 38b0811829 madvise.2: Incorporate some (ancient) comments about MADV_HUGEPAGE
Back in 2011, a mail from Andrea Arcangeli noted some details
that I never got round to incorporating into the manual page.

Reported-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Michael Kerrisk ed09120acd accept.2, epoll_create.2, inotify_add_watch.2, open.2, open_by_handle_at.2, pidfd_open.2, dirfd.3, posix_openpt.3, shm_open.3: Fix clumsy wording around "nonnegative file descriptors"
Reported-by: Christian Brauner <christian@brauner.io>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Michael Kerrisk 96ef140634 arch_prctl.2: Minor fixes to Keno Fischer's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Michael Kerrisk 5c47b28dd9 arch_prctl.2: srcfix: rewrap source lines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Keno Fischer 8005280bf8 arch_prctl.2: Add ARCH_SET_CPUID subcommand
This subcommand was added a few years ago to support cpuid emulation
on x86 targets, but no changes to the man page appear to have been
made at the time. This commit adds a description for it and the
corresponding getter.

Signed-off-by: Keno Fischer <keno@juliacomputing.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-10 09:41:55 +02:00
Michael Kerrisk f4ba6a215f connect.2: Update the details on AF_UNSPEC
Update the details on AF_UNSPEC and circumstances in which
socket can be reconnected.

From a mail conversation with Eric Dumazet:

> connect() man page seems obsolete or confusing :
>
>    Generally,  connection-based  protocol  sockets may successfully
>    connect() only once; connectionless protocol  sockets  may  use
>    connect()  multiple times  to  change  their association.
>    Connectionless sockets may dissolve the association by connecting to
>    an address with the sa_family  member  of sockaddr set to AF_UNSPEC
>    (supported on Linux since kernel 2.2).>
>
> 1) At least TCP has supported AF_UNSPEC thing forever.
> 2) By definition connectionless sockets do not have an association,
>    why would they call connect(AF_UNSPEC) to remove a connection
>    which does not exist ...

Calling connect() on a connectionless socket serves two purposes:
a) Assigns a default outgoing address for datagrams (sent using write(2)).
b) Causes datagrams sent from sources other than the peer address to be
   discarded.

Both of these things are true in AF_UNIX and the Internet domains.
Using connect(AF_UNSPEC) allows the local datagram socket to clear
this association (without having to connect() to a *different*
peer), so that now it can send datagrams to any peer and receive
datagrams for any peer, (I've just retested all of this.)

>
> Maybe we should rewrite this paragraph to match reality, since
> this causes confusion.
>
>
>    Some protocol sockets may successfully connect() only once.
>    Some protocol sockets may use connect() multiple times  to  change
>    their association.
>    Some protocol sockets may dissolve the association by connecting to
>    an address with the sa_family member of sockaddr set to AF_UNSPEC
>    (supported on Linux since kernel 2.2).

When I first saw your note, I was afraid that I had written
the offending text. But, I see it has been there since the
manual page was first added in 1992 (other than the piece
"(supported since on Linux since kernel 2.2)", which I added in
2007). Perhaps it was true in 1992.

Anyway, I confirm your statement about TCP sockets. The
connect(AF_UNSPEC) thing works; thereafter, the socket may be
connected to another socket.

Interestingly, connect(AF_UNSPEC) does not seem to work for
UNIX domain stream sockets. (My light testing gives an EINVAL
error on connect(AF_UNSPEC) of an already connected UNIX stream
socket. I could not easily spot where this error was being
generated in the kernel though.)

Reported-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 13:43:00 +02:00
Michael Kerrisk ed6fe0056d open.2: Note EINVAL error for invalid character in basename of 'pathname'
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 11:37:01 +02:00
Michael Kerrisk ff5de6ecc4 timerfd_create.2: Refer reader to clock_getres(2) for further details on the clocks
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 10:24:47 +02:00
Michael Kerrisk 96d8887df7 timer_create.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 10:24:47 +02:00
Michael Kerrisk 65ff4e238d clock_getres.2: Minor clarification in description of CLOCK_BOOTTIME
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 10:24:36 +02:00
Michael Kerrisk f3c29937e6 prctl.2: Note semantics of IO_FLUSHER state with respect to fork(2) and execve(2)
Reported-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 10:07:04 +02:00
Michael Kerrisk 22a2e0553b lseek.2: ERRORS: ENXIO can also occur SEEK_DATA in middle of hole at end of file
Quoting Matthew Wilcox:

    The current text of the lseek manpage is ambiguous about
    the behaviour of lseek(SEEK_DATA) for a file which is
    entirely a hole (or the end of the file is a hole and the
    pos lies within the hole).  The draft POSIX language is
    specific (ENXIO is returned when whence is SEEK_DATA and
    offset lies within the final hole of the file).  Could I
    trouble you to wordsmith that in?

    If you want to look at the draft POSIX text, it's here:
    https://www.austingroupbugs.net/view.php?id=415

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 10:06:56 +02:00
Michael Kerrisk ab366b4567 lseek.2: Minor fix to wording of ENXIO error
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-06 06:59:35 +02:00
Michael Kerrisk bef940caef clock_getres.2: Minor tweaks to example
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-04 10:52:16 +02:00
Michael Kerrisk a04e44bd3a clock_getres.2: Clarify that CLOCK_MONOTONIC is system-wide
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-04 09:49:03 +02:00
Michael Kerrisk 9d69bebbd6 clock_getres.2: Clarify that CLOCK_TAI is nonsettable
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-04 09:49:03 +02:00
Michael Kerrisk 16fa57813e clock_getres.2: Add an example program
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-04 09:32:33 +02:00
Michael Kerrisk a48d19162d clock_getres.2: wfix: EOPNOTSUPP --> ENOTSUP
The two error codes are synonymous, but ENOTSUP is what is used
in other related pages.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 21:54:07 +02:00
Eric Rannaud f873b37560 clock_getres.2: Dynamic POSIX clock devices can return other errors
See Linux source as of v5.4:
  kernel/time/posix-clock.c

Signed-off-by: Eric Rannaud <e@nanocritical.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 21:52:01 +02:00
Michael Kerrisk 0f1553b5fd timerfd_create.2: Note a case where timterfd_settime() can fail with ECANCELED
From email discussions with Thomas Gleixner:

======

Hello Thomas, et al,

Following on from our discussion of read() on a timerfd [1], I
happened to remember a Debian bug report [2] that points out that
timer_settime() can fail with the error ECANCELED, which is both
surprising and odd (because despite the error, the timer does get
updated).

The relevant kernel code (I think, from your commit [3]) seems to be
the following in timerfd_setup():

        if (texp != 0) {
                if (flags & TFD_TIMER_ABSTIME)
                        texp = timens_ktime_to_host(clockid, texp);
                if (isalarm(ctx)) {
                        if (flags & TFD_TIMER_ABSTIME)
                                alarm_start(&ctx->t.alarm, texp);
                        else
                                alarm_start_relative(&ctx->t.alarm, texp);
                } else {
                        hrtimer_start(&ctx->t.tmr, texp, htmode);
                }

                if (timerfd_canceled(ctx))
                        return -ECANCELED;
        }

Using a small test program [4] shows the behavior. The program loops,
repeatedly calling timerfd_settime() (with a delay of a few seconds
before each call). In another terminal window, enter the following
command a few times:

    $ sudo date -s "5 seconds"       # Add 5 secs to wall-clock time

I see behavior as follows (the /sudo date -s "5 seconds"/ command was
executed before loop iterations 0, 2, and 4):

[[
$ ./timerfd_settime_ECANCELED
0
Current time is 1585729978 secs, 868510078 nsecs
Timer value is now 0 secs, 0 nsecs
timerfd_settime() succeeded
Timer value is now 9 secs, 999991977 nsecs

1
Current time is 1585729982 secs, 716339545 nsecs
Timer value is now 6 secs, 152167990 nsecs
timerfd_settime() succeeded
Timer value is now 9 secs, 999992940 nsecs

2
Current time is 1585729991 secs, 567377831 nsecs
Timer value is now 1 secs, 148959376 nsecs
timerfd_settime: Operation canceled
Timer value is now 9 secs, 999976294 nsecs

3
Current time is 1585729995 secs, 405385503 nsecs
Timer value is now 6 secs, 161989917 nsecs
timerfd_settime() succeeded
Timer value is now 9 secs, 999993317 nsecs

4
Current time is 1585730004 secs, 225036165 nsecs
Timer value is now 1 secs, 180346909 nsecs
timerfd_settime: Operation canceled
Timer value is now 9 secs, 999984345 nsecs
]]

I note from the above.

(1) If the wall-clock is changed before the first timerfd_settime()
call, the call succeeds. This is of course expected.
(2) If the wall-clock is changed after a timerfd_settime() call, then
the next timerfd_settime() call fails with ECANCELED.
(3) Even if the timerfd_settime() call fails, the timer is still updated(!).

Some questions:
(a) What is the rationale for timerfd_settime() failing with ECANCELED
in this case? (Currently, the manual page says nothing about this.)
(b) It seems at the least surprising, but more likely a bug, that
timerfd_settime() fails with ECANCELED while at the same time
successfully updating the timer value.

Your thoughts?

Thanks,

Michael

[1] https://lore.kernel.org/lkml/3cbd0919-c82a-cb21-c10f-0498433ba5d1@gmail.com/

[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=947091

[3]
commit 99ee5315dac6211e972fa3f23bcc9a0343ff58c4
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed Apr 27 14:16:42 2011 +0200

    timerfd: Allow timers to be cancelled when clock was set

[4]
/* timerfd_settime_ECANCELED.c */
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <inttypes.h>
#include <sys/timerfd.h>

#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)

int
main(int argc, char *argv[])
{
    struct itimerspec ts, gts;
    struct timespec start;

    int tfd = timerfd_create(CLOCK_REALTIME, 0);
    if (tfd == -1)
        errExit("timerfd_create");

    ts.it_interval.tv_sec = 0;
    ts.it_interval.tv_nsec = 10;

    int flags = TFD_TIMER_ABSTIME | TFD_TIMER_CANCEL_ON_SET;

    for (long j ; ; j++) {

        /* Inject a delay into each loop, by calling getppid()
           many times */

        for (int k = 0; k < 10000000; k++)
            getppid();

        if (j % 1 == 0)
            printf("%ld\n", j);

        /* Display the current wall-clock time */

        if (clock_gettime(CLOCK_REALTIME, &start) == -1)
            errExit("clock_gettime");
        printf("Current time is %ld secs, %ld nsecs\n",
                start.tv_sec, start.tv_nsec);

        /* Before resetting the timer, retrieve its current value
           so that after the timerfd_settime() call, we can see
           whether the the value has changed */

        if (timerfd_gettime(tfd, &gts) == -1)
            perror("timerfd_gettime");
        printf("Timer value is now %ld secs, %ld nsecs\n",
            gts.it_value.tv_sec, gts.it_value.tv_nsec);

        /* Reset the timer to now + 10 secs */

        ts.it_value.tv_sec = start.tv_sec + 10;
        ts.it_value.tv_nsec = start.tv_nsec;
        if (timerfd_settime(tfd, flags, &ts, NULL) == -1)
            perror("timerfd_settime");
        else
            printf("timerfd_settime() succeeded\n");

        /* Display the timer value once again */

        if (timerfd_gettime(tfd, &gts) == -1)
            perror("timerfd_gettime");
        printf("Timer value is now %ld secs, %ld nsecs\n",
            gts.it_value.tv_sec, gts.it_value.tv_nsec);

        printf("\n");
    }
}

=======

Subject: Re: timer_settime() and ECANCELED
Date: Wed, 01 Apr 2020 19:42:42 +0200
From: Thomas Gleixner <tglx@linutronix.de>

Michael,

"Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com> writes:
> Following on from our discussion of read() on a timerfd [1], I
> happened to remember a Debian bug report [2] that points out that
> timer_settime() can fail with the error ECANCELED, which is both
> surprising and odd (because despite the error, the timer does get
> updated).
...
> (1) If the wall-clock is changed before the first timerfd_settime()
> call, the call succeeds. This is of course expected.
> (2) If the wall-clock is changed after a timerfd_settime() call, then
> the next timerfd_settime() call fails with ECANCELED.
> (3) Even if the timerfd_settime() call fails, the timer is still updated(!).
>
> Some questions:
> (a) What is the rationale for timerfd_settime() failing with ECANCELED
> in this case? (Currently, the manual page says nothing about this.)
> (b) It seems at the least surprising, but more likely a bug, that
> timerfd_settime() fails with ECANCELED while at the same time
> successfully updating the timer value.

Really good question and TBH I can't remember why this is implemented in
the way it is, but I have a faint memory that at least (a) is
intentional.

After staring at the code for a while I came up with the following
answers:

(a): If the clock was set event ("date -s ...") which triggered the
     cancel was not yet consumed by user space via read(), then that
     information would get lost because arming the timer to the new
     value has to reset the state.

(b): Arming the timer in that case is indeed very questionable, but it
     could be argued that because the clock was set event happened with
     the old expiry value that the new expiry value is not affected.

     I'd be happy to change that and not arm the timer in the case of a
     pending cancel, but I fear that some user space already depends on
     that behaviour.

Thanks,

        tglx

======

Subject: Re: timer_settime() and ECANCELED
Date: Thu, 02 Apr 2020 10:49:18 +0200
From: Thomas Gleixner <tglx@linutronix.de>
To: Michael Kerrisk (man-pages) <mtk.manpages@gmail.com>

"Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com> writes:
> On 4/1/20 7:42 PM, Thomas Gleixner wrote:
>> (b): Arming the timer in that case is indeed very questionable, but it
>>      could be argued that because the clock was set event happened with
>>      the old expiry value that the new expiry value is not affected.
>>
>>      I'd be happy to change that and not arm the timer in the case of a
>>      pending cancel, but I fear that some user space already depends on
>>      that behaviour.
>
> Yes, that's the risk, of course. So, shall we just document all
> this in the manual page?

I think so.

Thanks,

        tglx
======

Reported-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 21:43:21 +02:00
Michael Kerrisk b5b0b2882e prctl.2: Reword description of PR_GET_IO_FLUSHER
Reported-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 14:13:51 +02:00
Michael Kerrisk 3872a3d621 prctl.2: Unused args must be zero for PR_GET_IO_FLUSHER and PR_SET_IO_FLUSHER
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 14:08:39 +02:00
Michael Kerrisk 4222606d2a prctl.2: f
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 14:07:12 +02:00
Michael Kerrisk 91e015066f prctl.2: Minor tweaks to Mike Christie's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 14:06:28 +02:00
Mike Christie 308eb2f636 prctl.2: Document PR_SETIO_FLUSHER/GET_IO_FLUSHER
This patch documents the PR_SET_IO_FLUSHER and PR_GET_IO_FLUSHER
prctl commands added to the linux kernel for 5.6 in commit:

    commit 8d19f1c8e1937baf74e1962aae9f90fa3aeab463
    Author: Mike Christie <mchristi@redhat.com>
    Date:   Mon Nov 11 18:19:00 2019 -0600

        prctl: PR_{G,S}ET_IO_FLUSHER to support controlling memory reclaim

Reviewed-by: Michal Hocko <mhocko@kernel.org>
Signed-off-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 13:59:05 +02:00
Michael Kerrisk ba1c6b2081 clock_getres.2: wfix: s/clk_id/clockid/ throughout
Most other manual pages use 'clockid' for the 'clockid_t'
argument.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:25 +02:00
Michael Kerrisk 717096082d clock_nanosleep.2: wfix: s/clock_id/clockid/ throughout
Most other section 2 pages use 'clockid' as the name
of the 'clockid_t' argument.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:25 +02:00
Michael Kerrisk 96d951a401 clock_nanosleep.2, timer_create.2, timerfd_create.2: Add various missing errors
Mostly verified by testing and reading the code.

There is unfortunately quite a bit of inconsistency across API~s:

                  clock_gettime  clock_settime  clock_nanosleep  timer_create  timerfd_create

CLOCK_BOOTTIME            y        n (EINVAL)     y                y             y
CLOCK_BOOTTIME_ALARM      y        n (EINVAL)     y [1]            y [1]         y [1]
CLOCK_MONOTONIC           y        n (EINVAL)     y                y             y
CLOCK_MONOTONIC_COARSE    y        n (EINVAL)     n (ENOTSUP)      n (ENOTSUP)   n (EINVAL)
CLOCK_MONOTONIC_RAW       y        n (EINVAL)     n (ENOTSUP)      n (ENOTSUP)   n (EINVAL)
CLOCK_REALTIME            y        y              y                y             y
CLOCK_REALTIME_ALARM      y        n (EINVAL)     y [1]            y [1]         y [1]
CLOCK_REALTIME_COARSE     y        n (EINVAL)     n (ENOTSUP)      n (ENOTSUP)   n (EINVAL)
CLOCK_TAI                 y        n (EINVAL)     y                y             n (EINVAL)
CLOCK_PROCESS_CPUTIME_ID  y        n (EINVAL)     y                y             n (EINVAL)
CLOCK_THREAD_CPUTIME_ID   y        n (EINVAL)     n (EINVAL [2])   y             n (EINVAL)
pthread_getcpuclockid()   y        n (EINVAL)     y                y             n (EINVAL)

[1] The caller must have CAP_WAKE_ALARM, or the error EPERM results.

[2] This error is generated in the glibc wrapper.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:25 +02:00
Michael Kerrisk 04e2e313fc timerfd_create.2: Rework text for EINVAL for invalid clock ID
The error description was crufty. There are more valid
clock IDs these days.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:25 +02:00
Michael Kerrisk d53b0f4822 clock_nanosleep.2: srcfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:25 +02:00
Michael Kerrisk 0e7984ff40 clock_nanosleep.2: clock_nanosleep() can also sleep against CLOCK_TAI
Presumably since Linux 3.10, when CLOCK_TAI was added to the
kernel.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:25 +02:00
Michael Kerrisk b24db7cb8a clock_nanosleep.2: srcfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:25 +02:00
Michael Kerrisk 14df252bf8 clock_getres.2: CLOCK_REALTIME_COARSE is not settable
In kernel/time/posix-timers.c, 'CLOCK_REALTIME_COARSE' has
no 'timer_set' method.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:57:18 +02:00
Michael Kerrisk 41043c0bd6 clock_getres.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:42:54 +02:00
Michael Kerrisk ac90b58942 clock_getres.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:42:54 +02:00
Michael Kerrisk eb6567fb00 clock_getres.2: Add CLOCK_REALTIME_ALARM and CLOCK_BOOTTIME_ALARM
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:42:54 +02:00
Michael Kerrisk da8a95bca1 timer_create.2: timer_create(2) also supports CLOCK_TAI
Presumably (and from a quick glance at the source code)
since Linux 3.10. when CLOCK_TAI was introduced.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:42:54 +02:00
Michael Kerrisk 0e4b87c4fd timer_create.2: Mention clock_getres(2) for further details on the various clocks
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 12:42:54 +02:00
Michael Kerrisk 966051ca74 clock_nanosleep.2: clock_nanosleep() also supports CLOCK_BOOTTIME
Presumably (and from a quick glance at the source code)
since Linux 2.6.39, when CLOCK_BOOTTIME was introduced.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-02 09:34:37 +02:00
Michael Kerrisk 2c16f1bc28 clock_getres.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-01 21:30:37 +02:00
Michael Kerrisk 066dcd09cb timerfd_create.2: wfix
See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=947091

Reported-by: Marc Lehmann <debian-reportbug@plan9.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-01 10:04:32 +02:00
Michael Kerrisk 372b58573a openat2.2: srcfix: remove a FIXME
Aleksa Sarai is okay with my text changes.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-01 08:36:49 +02:00
Michael Kerrisk 08ba10a6d5 openat2.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-01 08:18:45 +02:00
Michael Kerrisk b4e1568256 openat2.2: Improve text describing caveat for use of RESOLVE_NO_XDEV
From email discussions with Aleksa Sarai:

> .\" FIXME I find the "previously-functional systems" in the previous
> .\" sentence a little odd (since openat2() ia new sysycall), so I would
> .\" like to clarify a little...
> .\" Are you referring to the scenario where someone might take an
> .\" existing application that uses openat() and replaces the uses
> .\" of openat() with openat2()? In which case, is it correct to
> .\" understand that you mean that one should not just indiscriminately
> .\" add the RESOLVE_NO_XDEV flag to all of the openat2() calls?
> .\" If I'm not on the right track, could you point me in the right
> .\" direction please.

This is mostly meant as a warning to hopefully avoid applications
because the developer didn't realise that system paths may contain
symlinks or bind-mounts. For an application which has switched to
openat2() and then uses RESOLVE_NO_SYMLINKS for a non-security reason,
it's possible that on some distributions (or future versions of a
distribution) that their application will stop working because a system
path suddenly contains a symlink or is a bind-mount.

This was a concern which was brought up on LWN some time ago. If you can
think of a phrasing that makes this more clear, I'd appreciate it.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-04-01 08:16:40 +02:00
Michael Kerrisk c85ebb3c94 openat2.2: Various tweaks to the dicussion of 'resolve' flags
Some tweaks inspired by https://lwn.net/Articles/796868/

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-31 09:50:48 +02:00
Michael Kerrisk e31d5bfd36 openat2.2: wfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-31 09:11:20 +02:00
Michael Kerrisk 193f7fb272 openat2.2: Place 'resolve' flags in alphabetical order
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-31 09:10:05 +02:00
Michael Kerrisk 1ae24555ba timerfd_create.2: Negetive changes to CLOCK_REALTIME may cause read() to return 0
Devi R K reported this issue, and went on to note:

> We have written a program using real time clock and it has been raised to
> the community.
>
> https://lore.kernel.org/lkml/alpine.DEB.2.21.1908191943280.1796@nanos.tec.linutronix.de/T/

[...]

Thanks for pointing me at that thread. In particular, the test
program at
https://lore.kernel.org/lkml/alpine.DEB.2.21.1908191943280.1796@nanos.tec.linutronix.de/T/#m489d81abdfbb2699743e18c37657311f8d52a4cd

[...]

I think this patch does not really capture the details
properly. The immediately preceding paragraph says:

         If  the  associated  clock  is  either  CLOCK_REALTIME   or
         CLOCK_REALTIME_ALARM,     the     timer     is     absolute
         (TFD_TIMER_ABSTIME), and the  flag  TFD_TIMER_CANCEL_ON_SET
         was  specified when calling timerfd_settime(), then read(2)
         fails with the  error  ECANCELED  if  the  real-time  clock
         undergoes a discontinuous change.  (This allows the reading
         application to discover such discontinuous changes  to  the
         clock.)

Following on from that, I think we should have a paragraph that says
something like:

         If  the  associated  clock  is  either  CLOCK_REALTIME   or
         CLOCK_REALTIME_ALARM,     the     timer     is     absolute
         (TFD_TIMER_ABSTIME), and the  flag  TFD_TIMER_CANCEL_ON_SET
         was not specified when calling timerfd_settime(), then a
         discontinuous negative change to the clock
         (e.g., clock_settime(2)) may cause read(2) to unblock, but
         return a value of 0 (i.e., no bytes read), if the clock
         change occurs after the time expired, but before the
         read(2) on the timerfd file descriptor.

This seems consistent with Thomas's observations in
https://lore.kernel.org/lkml/alpine.DEB.2.21.1908191943280.1796@nanos.tec.linutronix.de/T/#m49b78122b573a2749a05b720dc9fa036546db490

==
Thomas Gleixner replied:

Yes, that's correct. Accurate as always!

This is pretty much in line with clock_nanosleep(CLOCK_REALTIME,
TIMER_ABSTIME) which has a similar problem vs. observability in user
space.

clock_nanosleep(2) mutters:

  "POSIX.1 specifies that after changing the value of the CLOCK_REALTIME
   clock via clock_settime(2), the new clock value shall be used to
   determine the time at which a thread blocked on an absolute
   clock_nanosleep() will wake up; if the new clock value falls past the
   end of the sleep interval, then the clock_nanosleep() call will return
   immediately."

which can be interpreted as guarantee that clock_nanosleep() never
returns prematurely, i.e. the assert() in the below code would indicate
a kernel failure:

   ret = clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &expiry, NULL);
   if (!ret) {
         clock_gettime(CLOCK_REALTIME, &now);
         assert(now >= expiry);
   }

But that assert can trigger when CLOCK_REALTIME was modified after the
timer fired and the kernel decided to wake up the task and let it return
to user space.

   clock_nanosleep(..., &expiry)
     arm_timer(expires);
     schedule();

   -> timer interrupt
      now = ktime_get_real();
      if (expires <= now)
              -------------------------------- After this point
         wakeup();                             clock_settime(2) or
                                               adjtimex(2) which
                                               makes CLOCK_REALTIME
                                               jump back far enough will
                                               cause the above assert
                                               to trigger.

   ...
   return from syscall (retval == 0)

There is no guarantee against clock_settime() coming after the
wakeup. Even if we put another check into the return to user path then
we won't catch a clock_settime() which comes right after that and before
user space invokes clock_gettime().

POSIX spec Issue 7 (2018 edition) says:

 The suspension for the absolute clock_nanosleep() function (that is,
 with the TIMER_ABSTIME flag set) shall be in effect at least until the
 value of the corresponding clock reaches the absolute time specified by
 rqtp.

And that's what the kernel implements for clock_nanosleep() and timerfd
behaves exactly the same way.

The wakeup of the waiter, i.e. task blocked in clock_nanosleep(2),
read(2), poll(2), is not happening _before_ the absolute time specified
is reached.

If clock_settime() happens right before the expiry check, then it does
the right thing, but any modification to the clock after the wakeup
cannot be mitigated. At least not in a way which would make the assert()
in the example code above a reliable indicator for a kernel fail.

That's the reason why I rejected the attempt to mitigate that particular
0 tick issue in timerfd as it would just scratch a particular itch but
still not provide any guarantee. So having the '0' return documented is
the right way to go.

Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reported-by: devi R.K <devi.feb27@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 22:52:58 +02:00
Michael Kerrisk 1f4cf8e85e openat2.2: srcfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 22:41:25 +02:00
Michael Kerrisk 7a18f60e4d openat2.2: Minor tweaks to the text
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 22:26:50 +02:00
Michael Kerrisk 552f379960 openat2.2: Further tweaks to the RESOLVE_IN_ROOT text
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 21:52:32 +02:00
Michael Kerrisk 9e0168b018 openat2.2: Minor tweaks to RESOLVE_IN_ROOT text
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 21:41:47 +02:00
Michael Kerrisk 75cd77e3c1 openat2.2: Minor change: reword a sentence
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 21:20:41 +02:00
Michael Kerrisk 39bfd04683 openat2.2: tfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 21:17:52 +02:00
Michael Kerrisk a424f7c064 openat2.2: srcfix: Disfavor multiargument .BR and .IR usage
For me, source lines such as:

    .BR perf_setattr "(2), " perf_event_open "(2), and " clone3 (2).

is harder to read than:

    .BR perf_setattr (2),
    .BR perf_event_open (2),
    and
    .BR clone3 (2).

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 14:52:47 +02:00
Michael Kerrisk d144dc36b8 openat2.2: Rework RESOLVE_IN_ROOT text
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 14:52:44 +02:00
Michael Kerrisk 36c9d56de6 openat2.2: Reorganize and rework introductory text a little
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 14:52:40 +02:00
Michael Kerrisk 6c6945d461 openat2.2: Remove one of the forward references to the "Extensibility" subsection
There are currently three of these forward references (two in
DESCRIPTION, one in ERRORS). This is a little redundant.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 14:44:59 +02:00
Michael Kerrisk 4ec6d407a9 openat2.2: Various wording improvements to Aleksa Sarai's text
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 14:44:59 +02:00
Michael Kerrisk 7a11fc63b8 open.2: Clarify that O_NOFOLLOW is relevant (only) for basename of 'pathname'
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 12:32:07 +02:00
Michael Kerrisk 7b7aad695b openat2.2: wfix: explicitly qualify fields of 'how' argument with "how."
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 12:32:07 +02:00
Michael Kerrisk 3fcaeb806a openat2.2: ffix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 12:32:07 +02:00
Michael Kerrisk 03625dc12d openat2.2: Place ERRORS in alphabetical order
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 12:32:07 +02:00
Michael Kerrisk 0105739e8b openat2.2: ffix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 10:20:06 +02:00
Michael Kerrisk 0389373e6e openat2.2: ffix (mainly: replace blank lines by .IP or .PP)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 10:19:20 +02:00
Michael Kerrisk 669403e99e openat2.2: spfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 10:19:20 +02:00
Michael Kerrisk 2d82152f53 openat2.2: srcfix: eliminate redundant blank lines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 10:19:20 +02:00
Michael Kerrisk 2359744f97 openat2.2: srcfix: semantic newlines and rewrap some long source lines
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 10:19:20 +02:00
Michael Kerrisk 4b322a2fc8 open.2: Minor tweaks to Aleksa Sarai's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 08:45:58 +02:00
Aleksa Sarai a2dbb2e378 open.2: Add references to new openat2(2) page
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 08:37:02 +02:00
Aleksa Sarai 89de505522 openat2.2: Document new openat2(2) syscall
Rather than trying to merge the new syscall documentation into
open.2 (which would probably result in the man-page being
incomprehensible), instead the new syscall gets its own dedicated
page with links between open(2) and openat2(2) to avoid
duplicating information such as the list of O_* flags or common
errors.

In addition to describing all of the key flags, information about
the extensibility design is provided so that users can better
understand why they need to pass sizeof(struct open_how) and how
their programs will work across kernels. After some discussions
with David Laight, I also included explicit instructions to zero
the structure to avoid issues when recompiling with new headers.

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-30 08:34:45 +02:00
Michael Kerrisk 238442a2de clock_getres.2: ERRORS: add EINVAL for attempt to set a nonsettable clock
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-29 22:36:19 +02:00
Michael Kerrisk c009a15c2e clock_getres.2: Improve description of CPU-time clocks
The current descriptions are a bit terse. Make the description
a little clearer.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-29 22:14:00 +02:00
Michael Kerrisk 71b7e2a5dc clock_getres.2: Note that CPU-time clocks are not settable.
Explicitly note that CLOCK_PROCESS_CPUTIME_ID and
CLOCK_PROCESS_CPUTIME_ID are not settable.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-29 22:11:24 +02:00
Michael Kerrisk a215069794 clock_getres.2: Move text in BUGS to NOTES
The fact that CLOCK_PROCESS_CPUTIME_ID and
CLOCK_PROCESS_CPUTIME_ID are not settable isn't a bug,
since POSIX does allow the possibility that these clocks
are not settable.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-29 22:08:10 +02:00
Michael Kerrisk 6cfa7458f7 clock_getres.2: Minor wording improvement
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-29 21:42:21 +02:00
Benjamin Peterson 3b9aa39b85 clock_getres.2: tfix
Signed-off-by: Benjamin Peterson <benjamin@python.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-29 09:20:58 +02:00
André Almeida c1e04f0116 futex.2: wfix
The sixth argument of futex is uaddr2, instead of uaddr.

Signed-off-by: André Almeida <andrealmeid@collabora.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-26 09:48:33 +01:00
Michael Kerrisk bf981e8b3b clock_getres.2: Minor tweaks to Benjamin Peterson's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-26 08:45:20 +01:00
Michael Kerrisk da9fe87d7c clock_getres.2: srcfix
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-26 08:44:37 +01:00
Benjamin Peterson 3eee751583 clock_getres.2: Document CLOCK_TAI
Signed-off-by: Benjamin Peterson <benjamin@python.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-26 08:41:25 +01:00
Michael Kerrisk e5d8f6046b timerfd_create.2: srcfix: remove obsolete FIXME
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk cbf25811f8 timer_getoverrun.2: srcfix: Update FIXME
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk 7f4a75814f gettid.2: Remove obsolete FIXME
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk b51c940445 execve.2: ERRORS: ENOENT does not occur for missing shared libraries
See http://sourceware.org/bugzilla/show_bug.cgi?id=12241.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk a0cdf1e1b3 shmget.2: Add a reference to the example in shmop(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk 5d7a184304 semctl.2: Add a reference to the example in shmop(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk 26c8d4bb8c semop.2: Add a reference to the semop(2) example in shmop(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk fc4774234e shmop.2: EXAMPLE: add a pair of example programs
Add example programs demonstrating usage of shmget(2), shmat(2),
semget(2), semctl(2), and semop(2).

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk 90f986d35f semget.2: EXAMPLE: add an example program
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:24:44 +01:00
Michael Kerrisk c436f71fa0 statx.2: Minor tweaks to Eric Bigger's patch
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2020-03-12 09:20:50 +01:00