]> git.ipfire.org Git - thirdparty/man-pages.git/log
thirdparty/man-pages.git
4 years agolocaledef.1: describe recently added options
Marko Myllynen [Mon, 26 Aug 2019 07:23:25 +0000 (10:23 +0300)] 
localedef.1: describe recently added options

Describe few recently added options (present in glibc-2.29).

Sort the options a bit more logically and alphabetically.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocgroups.7: tfix
Eric Biggers [Sat, 24 Aug 2019 21:11:54 +0000 (14:11 -0700)] 
cgroups.7: tfix

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosocket.2: tfix
Eric Biggers [Sat, 24 Aug 2019 21:11:07 +0000 (14:11 -0700)] 
socket.2: tfix

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocapabilities.7: tfix
Marko Myllynen [Mon, 26 Aug 2019 07:22:58 +0000 (10:22 +0300)] 
capabilities.7: tfix

Hi Michael, it's been a while but few simple patches today..

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouser_namespaces.7: tfix
Marko Myllynen [Mon, 26 Aug 2019 07:23:15 +0000 (10:23 +0300)] 
user_namespaces.7: tfix

This and the previous were the only ones grep found.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouname.2: Replace reference to namespaces(7) with reference to uts_namespaces(7)
Michael Kerrisk [Mon, 26 Aug 2019 21:01:14 +0000 (23:01 +0200)] 
uname.2: Replace reference to namespaces(7) with reference to uts_namespaces(7)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agogetdomainname.2: Add mention of UTS namespaces
Michael Kerrisk [Mon, 26 Aug 2019 21:00:45 +0000 (23:00 +0200)] 
getdomainname.2: Add mention of UTS namespaces

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouts_namespaces.7: SEE ALSO: add gethostname(2), getdomainname(2), uname(2)
Michael Kerrisk [Mon, 26 Aug 2019 20:58:38 +0000 (22:58 +0200)] 
uts_namespaces.7: SEE ALSO: add gethostname(2), getdomainname(2), uname(2)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agogethostname.2: Mention UTS namespaces
Michael Kerrisk [Mon, 26 Aug 2019 20:57:11 +0000 (22:57 +0200)] 
gethostname.2: Mention UTS namespaces

Reported-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agonamespaces.7: Remove content migrated to uts_namespaces(7)
Michael Kerrisk [Mon, 26 Aug 2019 20:52:25 +0000 (22:52 +0200)] 
namespaces.7: Remove content migrated to uts_namespaces(7)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouts_namespaces.7: New page with content migrated from namespaces(7)
Michael Kerrisk [Mon, 26 Aug 2019 20:50:29 +0000 (22:50 +0200)] 
uts_namespaces.7: New page with content migrated from namespaces(7)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomq_overview.7: wfix
Michael Kerrisk [Mon, 26 Aug 2019 20:33:44 +0000 (22:33 +0200)] 
mq_overview.7: wfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomq_overview.7, sysvipc.7: Adjust references to namespaces(7) to ipc_namespaces(7)
Michael Kerrisk [Mon, 26 Aug 2019 20:32:36 +0000 (22:32 +0200)] 
mq_overview.7, sysvipc.7: Adjust references to namespaces(7) to ipc_namespaces(7)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agonamespaces.7: Remove content migrated to new ipc_namespaces(7) page
Michael Kerrisk [Mon, 26 Aug 2019 20:29:50 +0000 (22:29 +0200)] 
namespaces.7: Remove content migrated to new ipc_namespaces(7) page

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoipc_namespaces.7: New page with content migrated from namespaces(7)
Michael Kerrisk [Mon, 26 Aug 2019 20:28:45 +0000 (22:28 +0200)] 
ipc_namespaces.7: New page with content migrated from namespaces(7)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agold.so.8: tfix
Jakub Wilk [Mon, 26 Aug 2019 16:19:21 +0000 (18:19 +0200)] 
ld.so.8: tfix

Escape hyphens.

Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Enhance the text on process-directed and thread-directed signals
Michael Kerrisk [Mon, 26 Aug 2019 20:04:12 +0000 (22:04 +0200)] 
signal.7: Enhance the text on process-directed and thread-directed signals

clone(2) has a good description of these concepts; borrow
from it liberally.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoclone.2: tfix
Michael Kerrisk [Mon, 26 Aug 2019 19:54:16 +0000 (21:54 +0200)] 
clone.2: tfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: tfix
Michael Kerrisk [Mon, 26 Aug 2019 19:45:13 +0000 (21:45 +0200)] 
signal.7: tfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouser_namespaces.7: Improve explanation of meaning of ownership of nonuser namespaces
Michael Kerrisk [Tue, 20 Aug 2019 07:56:33 +0000 (09:56 +0200)] 
user_namespaces.7: Improve explanation of  meaning of ownership of nonuser namespaces

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agostatx.2: Clarify details of a case where an invalid 'mask' value may be rejected
Michael Kerrisk [Tue, 20 Aug 2019 07:29:49 +0000 (09:29 +0200)] 
statx.2: Clarify details of a case where an invalid 'mask' value may be rejected

As reported by Simone:

    I was looking at version from 2017-09-15 but it's the same
    on: http://man7.org/linux/man-pages/man2/statx.2.html
    (2019-03-06)

    There is reported (about the mask argument) after the list
    of constants:

    > Note that the kernel does not reject values in mask other
    > than the above.  Instead, it simply informs the caller which
    > values are sup‐ ported by this kernel and filesystem via the
    > statx.stx_mask field.

    But as reported in the error values, there can be EINVAL if
    mask has a reserved valued, and I found a check against
    STATX__RESERVED in fs/stat.c for this. So if you use a that
    bit (0x80000000U) the kernel will reject the value.

    Probably is better to say that the kernel do not enforce the
    use of only the listed values, but there are anyway reserved
    values so and so you cannot put whatever you want on mask
    (that apply to more values than UINT_MAX).

Reported-by: Simone Piccardi <piccardi@truelite.it>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoproc.5: tfix
Jakub Wilk [Fri, 2 Aug 2019 21:46:55 +0000 (23:46 +0200)] 
proc.5: tfix

Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoproc.5: ffix
Ingo Schwarze [Fri, 2 Aug 2019 12:02:06 +0000 (14:02 +0200)] 
proc.5: ffix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocapabilities.7: CAP_SYS_ADMIN allows modifying autogroup nice values
Michael Kerrisk [Fri, 2 Aug 2019 11:55:47 +0000 (13:55 +0200)] 
capabilities.7: CAP_SYS_ADMIN allows modifying autogroup nice values

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoChanges.old: Fixes to 5.02 log
Michael Kerrisk [Fri, 2 Aug 2019 09:23:41 +0000 (11:23 +0200)] 
Changes.old: Fixes to 5.02 log

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoStart of man-pages-5.03: updating Changes and Changes.old
Michael Kerrisk [Fri, 2 Aug 2019 08:31:40 +0000 (10:31 +0200)] 
Start of man-pages-5.03: updating Changes and Changes.old

4 years agoStart of man-pages-5.03: updating .Announce and .lsm files
Michael Kerrisk [Fri, 2 Aug 2019 08:31:40 +0000 (10:31 +0200)] 
Start of man-pages-5.03: updating .Announce and .lsm files

4 years agoStart of man-pages-5.03: renaming .Announce and .lsm files
Michael Kerrisk [Fri, 2 Aug 2019 08:31:40 +0000 (10:31 +0200)] 
Start of man-pages-5.03: renaming .Announce and .lsm files

4 years agoReady for 5.02 man-pages-5.02
Michael Kerrisk [Fri, 2 Aug 2019 06:47:19 +0000 (08:47 +0200)] 
Ready for 5.02

4 years agoproc.5: tfix
Michael Kerrisk [Fri, 2 Aug 2019 06:37:26 +0000 (08:37 +0200)] 
proc.5: tfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoprctl.2: ffix
Michael Kerrisk [Fri, 2 Aug 2019 06:35:43 +0000 (08:35 +0200)] 
prctl.2: ffix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopldd.1, bpf.2, chdir.2, clone.2, fanotify_init.2, fanotify_mark.2, intro.2, ipc.2...
Michael Kerrisk [Fri, 2 Aug 2019 06:34:32 +0000 (08:34 +0200)] 
pldd.1, bpf.2, chdir.2, clone.2, fanotify_init.2, fanotify_mark.2, intro.2, ipc.2, mount.2, mprotect.2, msgctl.2, msgget.2, msgop.2, pivot_root.2, pkey_alloc.2, poll.2, prctl.2, semctl.2, semget.2, semop.2, setxattr.2, shmctl.2, shmget.2, shmop.2, tkill.2, dlopen.3, exec.3, ftok.3, getutent.3, on_exit.3, strcat.3, cpuid.4, proc.5, capabilities.7, cgroup_namespaces.7, credentials.7, fanotify.7, mount_namespaces.7, namespaces.7, sched.7, signal.7, socket.7, unix.7, user_namespaces.7, vdso.7, xattr.7, ld.so.8: tstamp

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoChanges: Ready for 5.02
Michael Kerrisk [Fri, 2 Aug 2019 06:32:54 +0000 (08:32 +0200)] 
Changes: Ready for 5.02

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosetxattr.2: Place new ERANGE error in correct alphabetical order
Michael Kerrisk [Thu, 1 Aug 2019 17:32:18 +0000 (19:32 +0200)] 
setxattr.2: Place new ERANGE error in correct alphabetical order

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosetxattr.2: Tweaks to Finn O'Leary's text
Michael Kerrisk [Thu, 1 Aug 2019 17:31:37 +0000 (19:31 +0200)] 
setxattr.2: Tweaks to Finn O'Leary's text

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosetxattr.2: Add ERANGE to 'ERRORS' section
Finn O'Leary [Wed, 31 Jul 2019 19:53:19 +0000 (19:53 +0000)] 
setxattr.2: Add ERANGE to 'ERRORS' section

Hi,

Both the Ext2 filesystem handler and the Ext4 filesystem handler will
return the ERANGE error code. Ext2 will return it if the name or value is
too long to be able to be stored, Ext4 will return it if the name is too
long. For reference, the relevant files/lines (with excerpts) are:

fs/ext2/xattr.c: lines 394 to 396 in ext2_xattr_set
>  394         name_len = strlen(name);
>  395         if (name_len > 255 || value_len > sb->s_blocksize)
>  396                 return -ERANGE;

fs/ext4/xattr.c: lines 2317 to 2318 in ext4_xattr_set_handle
> 2317         if (strlen(name) > 255)
> 2318                 return -ERANGE;

Other filesystems also return this code:

xfs/libxfs/xfs_attr.h: lines 53 to 55
> * The maximum size (into the kernel or returned from the kernel) of an
> * attribute value or the buffer used for an attr_list() call.  Larger
> * sizes will result in an ERANGE return code.

It's possible that more filesystem handlers do this, a cursory grep shows
that most of the filesystem xattr handler files mention ERANGE in some
form. A suggested patch is below (I'm not 100% sure on the wording through).

Thanks

--
- Finn

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomount_namespaces.7: ffix
Michael Kerrisk [Mon, 29 Jul 2019 19:39:53 +0000 (21:39 +0200)] 
mount_namespaces.7: ffix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoprctl.2: Correct some details for PR_SET_TIMERSLACK
Yang Xu [Wed, 24 Jul 2019 06:52:23 +0000 (14:52 +0800)] 
prctl.2: Correct some details for PR_SET_TIMERSLACK

In kernel/sys.c, arg2 is an unsigned long value and it will never
less than 0. Also, since kernel commit id da8b44d5a9f8 (Linux
4.6), timer_slack_ns and default timer_slack_ns have been
converted into u64, the return value of PR_GET_TIMERSLACK has been
limited under ULONG_MAX.

The timer slack value also can be inherited by a child created via
fork(2).

Reviewed-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosched.7: SEE ALSO: add pthread_getschedparam(3)
Michael Kerrisk [Mon, 29 Jul 2019 12:21:51 +0000 (14:21 +0200)] 
sched.7: SEE ALSO: add pthread_getschedparam(3)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopoll.2: Note that poll() equivalent code for ppoll() is not quite equivalent
Michael Kerrisk [Mon, 29 Jul 2019 12:01:36 +0000 (14:01 +0200)] 
poll.2: Note that poll() equivalent code for ppoll() is not quite equivalent

As reported by Alan Stern:

Here are two extracts from the man page for ppoll(2):

     Specifying a negative value in timeout means an infinite
     timeout.

     Other than the difference in the precision of the timeout
     argument, the following ppoll() call:

       ready = ppoll(&fds, nfds, tmo_p, &sigmask);

     is equivalent to atomically executing the following calls:

       sigset_t origmask;
       int timeout;

       timeout = (tmo_p == NULL) ? -1 :
                 (tmo_p->tv_sec * 1000 + tmo_p->tv_nsec / 1000000);
       pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
       ready = poll(&fds, nfds, timeout);
       pthread_sigmask(SIG_SETMASK, &origmask, NULL);

But if tmo_p->tv_sec is negative, the ppoll() call is not
equivalent to the corresponding poll() call.  The kernel rejects
negative values of tv_sec with an EINVAL error; it does not
interpret the value as meaning an infinite timeout.

(Yes, the kernel interprets tmo_p == NULL as an infinite timeout,
but the man page is still wrong for the case tmo_p->tv_sec < 0.)

Suggested fix: Following the end of the second extract above, add:

    except that negative time values in tmo_p are not
    interpreted as an infinite timeout.

Also, in the ERRORS section, change the text for EINVAL to:

    EINVAL The nfds value exceeds the RLIMIT_NOFILE value or
    *tmo_p contains an invalid (negative) time value.

Reported-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocapabilities.7: Add pivot_root(2) to CAP_SYS_ADMIN list
Michael Kerrisk [Sun, 28 Jul 2019 07:39:28 +0000 (09:39 +0200)] 
capabilities.7: Add pivot_root(2) to CAP_SYS_ADMIN list

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomount.2: ERRORS: Add a couple of EINVAL errors for MS_MOVE
Michael Kerrisk [Sat, 27 Jul 2019 14:41:42 +0000 (16:41 +0200)] 
mount.2: ERRORS: Add a couple of EINVAL errors for MS_MOVE

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomount.2: tfix
Michael Kerrisk [Fri, 26 Jul 2019 21:28:08 +0000 (23:28 +0200)] 
mount.2: tfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomount.2: SEE ALSO: add chroot(2) and pivot_root(2)
Michael Kerrisk [Fri, 26 Jul 2019 21:27:18 +0000 (23:27 +0200)] 
mount.2: SEE ALSO: add chroot(2) and pivot_root(2)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopivot_root.2: 'put_old' can't be a mount point with MS_SHARED propagation
Michael Kerrisk [Fri, 26 Jul 2019 21:22:59 +0000 (23:22 +0200)] 
pivot_root.2: 'put_old' can't be a mount point with MS_SHARED propagation

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopivot_root.2: SEE ALSO: add mount(2)
Michael Kerrisk [Fri, 26 Jul 2019 15:10:58 +0000 (17:10 +0200)] 
pivot_root.2: SEE ALSO: add mount(2)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopivot_root.2: ERRORS: EINVAL occurs if 'new_root' or its parent has shared propagation
Michael Kerrisk [Fri, 26 Jul 2019 15:10:06 +0000 (17:10 +0200)] 
pivot_root.2: ERRORS: EINVAL occurs if 'new_root' or its parent has shared propagation

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopivot_root.2: 'new_root' must be a mount point
Michael Kerrisk [Fri, 26 Jul 2019 14:54:16 +0000 (16:54 +0200)] 
pivot_root.2: 'new_root' must be a mount point

It appears that 'new_root' may not have needed to be a mount
point on ancient kernels, but already in Linux 2.4.5, there
was the diff shown below. Verified also by testing.

@@ -1631,8 +1605,9 @@
  *  - we don't move root/cwd if they are not at the root (reason: if something
  *    cared enough to change them, it's probably wrong to force them elsewhere)
  *  - it's okay to pick a root that isn't the root of a file system, e.g.
- *    /nfs/my_root where /nfs is the mount point. Better avoid creating
- *    unreachable mount points this way, though.
+ *    /nfs/my_root where /nfs is the mount point. It must be a mountpoint,
+ *    though, so you may need to say mount --bind /nfs/my_root /nfs/my_root
+ *    first.
  */

 asmlinkage long sys_pivot_root(const char *new_root, const char *put_old)
@@ -1640,7 +1615,7 @@
        struct dentry *root;
        struct vfsmount *root_mnt;
        struct vfsmount *tmp;
-       struct nameidata new_nd, old_nd;
+       struct nameidata new_nd, old_nd, parent_nd, root_parent;
        char *name;
        int error;

@@ -1688,6 +1663,10 @@
        if (new_nd.mnt == root_mnt || old_nd.mnt == root_mnt)
                goto out2; /* loop */
        error = -EINVAL;
+       if (root_mnt->mnt_root != root)
+               goto out2;
+       if (new_nd.mnt->mnt_root != new_nd.dentry)
+               goto out2; /* not a mountpoint */
        tmp = old_nd.mnt; /* make sure we can reach put_old from new_root */
        spin_lock(&dcache_lock);
        if (tmp != new_nd.mnt) {

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomount_namespaces.7: Clarify implications for other NS if mount point is removed in...
Michael Kerrisk [Tue, 23 Jul 2019 21:04:27 +0000 (23:04 +0200)] 
mount_namespaces.7: Clarify implications for other NS if mount point is removed in one NS

If a mount point is deleted or renamed or removed in one mount
namespace, this will cause an object that is mounted at that
location in another mount namespace to be unmounted (as verified
by experiment). This was implied by the existing text, but it is
better to make this detail explicit.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agonamespaces.7: srcfix
Michael Kerrisk [Tue, 23 Jul 2019 19:42:58 +0000 (21:42 +0200)] 
namespaces.7: srcfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomount_namespaces.7: SEE ALSO: add pivot_root(2), pivot_root(8)
Michael Kerrisk [Mon, 22 Jul 2019 18:59:38 +0000 (20:59 +0200)] 
mount_namespaces.7: SEE ALSO: add pivot_root(2), pivot_root(8)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agonamespaces.7: Note initial values of hostname and domainname in a new UTS namespace
Michael Kerrisk [Sat, 20 Jul 2019 21:50:50 +0000 (23:50 +0200)] 
namespaces.7: Note initial values of hostname and domainname in a new UTS namespace

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agogetutent.3: Fix missing include file in EXAMPLE
Michael Kerrisk [Sat, 20 Jul 2019 13:56:34 +0000 (15:56 +0200)] 
getutent.3: Fix missing include file in EXAMPLE

See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=932382

Reported-by: Thorsten Glaser <tg@mirbsd.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocapabilities.7: Add a note about using strace on binaries that have capabilities
Michael Kerrisk [Wed, 17 Jul 2019 02:19:01 +0000 (04:19 +0200)] 
capabilities.7: Add a note about using strace on binaries that have capabilities

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agogetgroups.2: ffix
Michael Kerrisk [Mon, 15 Jul 2019 22:23:22 +0000 (00:23 +0200)] 
getgroups.2: ffix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopldd.1: ffix
Michael Kerrisk [Sat, 13 Jul 2019 19:03:00 +0000 (13:03 -0600)] 
pldd.1: ffix

Reported-by: G. Branden Robinson <g.branden.robinson@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopldd.1: ffix: replace tab with spaces
Michael Kerrisk [Sat, 13 Jul 2019 19:00:26 +0000 (13:00 -0600)] 
pldd.1: ffix: replace tab with spaces

Reported-by: G. Branden Robinson <g.branden.robinson@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopldd.1: Note that the glibc 2.30 pldd fix has been backported on some distros
Michael Kerrisk [Sat, 13 Jul 2019 18:57:27 +0000 (12:57 -0600)] 
pldd.1: Note that the glibc 2.30 pldd fix has been backported on some distros

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopldd.1: Minor wording fixes
G. Branden Robinson [Sat, 13 Jul 2019 18:50:48 +0000 (12:50 -0600)] 
pldd.1: Minor wording fixes

* Establish the abbreviations DSO and PID in the lead paragraph
  since they are used later.
* Parallelize descriptions of help, usage, and version options
  with the "and exit" language used in getent(1), iconv(1),
  locale(1), localedef(1), memusage(1), memusagestat(1),
  mtrace(1), pldd(1), sprof(1), time(1), iconvconfig(8),
  zdump(8), and zic(8).

Signed-off-by: G. Branden Robinson <g.branden.robinson@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopldd.1: Document glibc's unbreakage of tool.
G. Branden Robinson [Sat, 13 Jul 2019 18:48:55 +0000 (12:48 -0600)] 
pldd.1: Document glibc's unbreakage of tool.

glibc 2.30 isn't released yet, but a fix has been committed, and
Debian has even cherry-picked it for Debian GNU/Linux 10
("buster").  pldd works nicely now.

Signed-off-by: G. Branden Robinson <g.branden.robinson@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Minor text rework
Michael Kerrisk [Sat, 13 Jul 2019 18:17:21 +0000 (12:17 -0600)] 
signal.7: Minor text rework

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Some reworking of Michal Sekletar's text
Michael Kerrisk [Sat, 13 Jul 2019 18:15:32 +0000 (12:15 -0600)] 
signal.7: Some reworking of Michal Sekletar's text

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Relocate Michal Sekletar's text
Michael Kerrisk [Sat, 13 Jul 2019 17:49:04 +0000 (11:49 -0600)] 
signal.7: Relocate Michal Sekletar's text

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Clarify that siginfo_t isn't changed on coalescing
Michal Sekletar [Thu, 11 Jul 2019 12:53:24 +0000 (14:53 +0200)] 
signal.7: Clarify that siginfo_t isn't changed on coalescing

Confirmed by experiment by mtk:

$ cat siginfo_nonqueuing.c

                        } while (0)

static void
grimReaper(int sig, siginfo_t *si, void *ucontext)
{
    printf("caught signal %d\n", sig);

    printf("    si_pid=%ld, si_uid=%ld, si_status=%d\n",
            (long) si->si_pid, (long) si->si_uid, si->si_status);
}

static void
child(int sleepTime, uid_t uid, int status)
{
    switch (fork()) {
    case -1:
        errExit("fork");
    case 0:
        sleep(sleepTime);
        if (geteuid() == 0)
            setuid(uid);

        printf("Child %ld with UID %ld exiting with status %d\n",
                (long) getpid(),(long) getuid(), status);
        exit(status);
    default:
        return;
    }
}

int
main(int argc, char *argv[])
{
    struct sigaction sa;
    sigset_t blocking;

    sa.sa_sigaction = grimReaper;
    sa.sa_flags = SA_SIGINFO;
    sigemptyset(&sa.sa_mask);

    if (sigaction(SIGCHLD, &sa, NULL) == -1)
        errExit("sigaction");

    sigemptyset(&blocking);
    sigaddset(&blocking, SIGCHLD);
    if (sigprocmask(SIG_BLOCK, &blocking, NULL) == -1)
        errExit("sigprocmask");

    child(2, 20000, 20);
    child(3, 30000, 30);
    child(1, 10000, 10);

    sleep(5);

    if (sigprocmask(SIG_UNBLOCK, &blocking, NULL) == -1)
        errExit("sigprocmask");

    exit(EXIT_SUCCESS);
}
$ ./siginfo_nonqueuing
Child 4042 with UID 1000 exiting with status 10
Child 4040 with UID 1000 exiting with status 20
Child 4041 with UID 1000 exiting with status 30
caught signal 17
    si_pid=4042, si_uid=1000, si_status=10

Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Lennart Poettering <lennart@poettering.net>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Michal Sekletar <msekleta@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Add subsection on queuing and delivery semantics for standard signals
Michael Kerrisk [Sat, 13 Jul 2019 17:42:09 +0000 (11:42 -0600)] 
signal.7: Add subsection on queuing and delivery semantics for standard signals

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoexecve.2: tfix
Jakub Wilk [Wed, 10 Jul 2019 17:27:49 +0000 (19:27 +0200)] 
execve.2: tfix

Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agobpf.2: Correct kernel version for JIT support on s390
Michael Kerrisk [Fri, 12 Jul 2019 12:47:31 +0000 (14:47 +0200)] 
bpf.2: Correct kernel version for JIT support on s390

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocredentials.7: Note that /proc/PID/status shows a process's credentials
Michael Kerrisk [Wed, 10 Jul 2019 13:44:47 +0000 (15:44 +0200)] 
credentials.7: Note that /proc/PID/status shows a process's credentials

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Various fields in /proc/PID/status show signal-related information
Michael Kerrisk [Wed, 10 Jul 2019 13:19:31 +0000 (15:19 +0200)] 
signal.7: Various fields in /proc/PID/status show signal-related information

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoproc.5: Correct description of /pro/PID/status 'ShdPnd' and 'SigPnd' fields
Michael Kerrisk [Wed, 10 Jul 2019 12:54:10 +0000 (14:54 +0200)] 
proc.5: Correct description of /pro/PID/status 'ShdPnd' and 'SigPnd' fields

These fields are signal masks, not counters.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoproc.5: Clarify that various mask fields in /proc/PID/status are in hexadecimal
Michael Kerrisk [Wed, 10 Jul 2019 12:14:03 +0000 (14:14 +0200)] 
proc.5: Clarify that various mask fields in /proc/PID/status are in hexadecimal

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoproc.5: tfix
Michael Kerrisk [Wed, 10 Jul 2019 12:11:07 +0000 (14:11 +0200)] 
proc.5: tfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agotkill.2: glibc 2.30 provides a wrapper for tgkill()
Michael Kerrisk [Mon, 8 Jul 2019 10:23:55 +0000 (12:23 +0200)] 
tkill.2: glibc 2.30 provides a wrapper for tgkill()

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agold.so.8: wfix: fix a clumsy wording that is hard to parse
Michael Kerrisk [Fri, 5 Jul 2019 08:16:01 +0000 (10:16 +0200)] 
ld.so.8: wfix: fix a clumsy wording that is hard to parse

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agold.so.8: Minor rewordings to ease readability
Michael Kerrisk [Wed, 3 Jul 2019 12:17:58 +0000 (14:17 +0200)] 
ld.so.8: Minor rewordings to ease readability

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: wfix: consistently use "object" rather than "library"
Michael Kerrisk [Wed, 3 Jul 2019 11:59:36 +0000 (13:59 +0200)] 
dlopen.3: wfix: consistently use "object" rather than "library"

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: Make it clear that RTLD_NODELETE also affects global variables
Michael Kerrisk [Wed, 3 Jul 2019 09:46:16 +0000 (11:46 +0200)] 
dlopen.3: Make it clear that RTLD_NODELETE also affects global variables

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: An object opened with RTLD_LOCAL can be promoted to RTLD_GLOBAL
Michael Kerrisk [Wed, 3 Jul 2019 08:57:33 +0000 (10:57 +0200)] 
dlopen.3: An object opened with RTLD_LOCAL can be promoted to RTLD_GLOBAL

Verified by experiment:

$ cat prog.c
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static int
callback(struct dl_phdr_info *info, size_t size, void *data)
{
    printf("\tName = %s\n", info->dlpi_name);

    return 0;
}

int
main(int argc, char *argv[])
{
    void *x1Handle, *x2Handle, *yHandle;
    void (*funcp)(void);
    char *err;

    x1Handle = dlopen("./lib_x1.so", RTLD_NOW | RTLD_LOCAL);
    if (x1Handle == NULL) {
        fprintf(stderr, "dlopen: %s\n", dlerror());
        exit(EXIT_FAILURE);
    }

    if (argc > 1) {
        x2Handle = dlopen("./lib_x2.so", RTLD_NOW | RTLD_GLOBAL);
        if (x2Handle == NULL) {
            fprintf(stderr, "dlopen: %s\n", dlerror());
            exit(EXIT_FAILURE);
        }
    }

    yHandle = dlopen("./lib_y1.so", RTLD_NOW | RTLD_LOCAL);
    if (yHandle == NULL) {
        fprintf(stderr, "dlopen: %s\n", dlerror());
        exit(EXIT_FAILURE);
    }

    (void) dlerror();                           /* Clear dlerror() */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
    funcp = (void (*)(void)) dlsym(yHandle, "y1_enter");
#pragma GCC diagnostic pop
    err = dlerror();
    if (err != NULL) {
        fprintf(stderr, "dlsym: %s", err);
        exit(EXIT_FAILURE);
    }

    (*funcp)();

    exit(EXIT_SUCCESS);
}

$ cat lib_x1.c
#include <stdio.h>

void
x1_enter(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

$ cat lib_x2.c
#include <stdio.h>

void
testfunc(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

$ cat lib_y1.c
#include <stdio.h>

void
testfunc(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

void
y1_enter(void)
{
    extern void y2(void);

    printf("Called %s\n\n", __func__);

    testfunc();
}

$ cat Build.sh
#!/bin/sh

CFLAGS="-Wno-implicit-function-declaration -Wl,--no-as-needed"

cc $CFLAGS -g -fPIC -shared -o lib_x2.so lib_x2.c
cc $CFLAGS -g -fPIC -shared -o lib_x1.so lib_x1.c ./lib_x2.so
cc $CFLAGS -g -fPIC -shared -o lib_y1.so lib_y1.c

cc $CFLAGS -o prog prog.c -ldl

$ sh Build.sh

$ ./prog
Called y1_enter

Called lib_y1.c::testfunc
$ ./prog x
Called y1_enter

Called lib_x2.c::testfunc

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: Minor wording fix
Michael Kerrisk [Wed, 3 Jul 2019 08:55:49 +0000 (10:55 +0200)] 
dlopen.3: Minor wording fix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: Clarify when an executable's symbols can be used for symbol resolution
Michael Kerrisk [Wed, 3 Jul 2019 08:06:36 +0000 (10:06 +0200)] 
dlopen.3: Clarify when an executable's symbols can be used for symbol resolution

The --export-dynamic linker option is not the only way that main's
global symbols may end up in the dynamic symbol table and thus be
used to satisfy symbol reference in a shared object. A symbol
may also be placed into the dynamic symbol table if ld(1)
notices a dependency in another object during the static link.

Verified by experiment; see previous commit.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: Clarify the rules for symbol resolution in a dlopen'ed object
Michael Kerrisk [Wed, 3 Jul 2019 07:45:55 +0000 (09:45 +0200)] 
dlopen.3: Clarify the rules for symbol resolution in a dlopen'ed object

The existing text wrongly implied that symbol look up first
occurred in the object and then in main, and did not mention
whether dependencies of main where used for symbol resolution.

Verified by experiment:

$ cat prog.c
#define _GNU_SOURCE
#include <link.h>
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void            /* A function defined in both main and lib_x1 */
prog_x1(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

/* The following function is forced into prog's dynamic symbol table
   because of the static link-time reference in lib_m1.so */

void            /* A function defined in both main and lib_y1 */
prog_y1_exp(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

/* The following function is not forced into prog's dynamic symbol table */

void            /* A function defined in both main and lib_y1 */
prog_y1_noexp(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

static int
callback(struct dl_phdr_info *info, size_t size, void *data)
{
    printf("\tName = %s\n", info->dlpi_name);

    return 0;
}

int
main(int argc, char *argv[])
{
    void *xHandle, *yHandle;
    void (*funcp)(void);
    char *err;

    xHandle = dlopen("./lib_x1.so", RTLD_NOW | RTLD_GLOBAL);
    if (xHandle == NULL) {
        fprintf(stderr, "dlopen: %s\n", dlerror());
        exit(EXIT_FAILURE);
    }

    yHandle = dlopen("./lib_y1.so", RTLD_NOW | RTLD_GLOBAL);
    if (yHandle == NULL) {
        fprintf(stderr, "dlopen: %s\n", dlerror());
        exit(EXIT_FAILURE);
    }

    /* Optionally display the link map() */

    if (argc > 1) {
        printf("Link map as shown from dl_iterate_phdr() callbacks:\n");
        dl_iterate_phdr(callback, NULL);
        printf("\n");
    }

    (void) dlerror();                           /* Clear dlerror() */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
    funcp = (void (*)(void)) dlsym(yHandle, "y1_enter");
#pragma GCC diagnostic pop
    err = dlerror();
    if (err != NULL) {
        fprintf(stderr, "dlsym: %s", err);
        exit(EXIT_FAILURE);
    }

    (*funcp)();

    exit(EXIT_SUCCESS);
}

$ cat lib_m1.c
#include <stdio.h>

void /* A function defined in both lib_m1 and lib_y1 */
m1_y1(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

#if 1
void
dummy(void)
{
    extern void prog_y1_exp(void);

    prog_y1_exp(); /* Forces prog_y1_exp into prog's dynamic symbol table,
   so that it will be visible also to lib_y1.so */
}
#endif

$ cat lib_x1.c
#include <stdio.h>

void /* A function defined in both main and lib_x1 */
prog_x1(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

void /* A function defined in both lib_x1 and lib_y1 */
x1_y1(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

$ cat lib_y1.c
#include <stdio.h>

void /* A function defined in both lib_x1 and lib_y1 */
x1_y1(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

void /* A function defined in both main and lib_y1 */
prog_y1_exp(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

void /* A function defined in both lib_m1 and lib_y1 */
m1_y1(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

void /* A function defined in both main and lib_y1 */
prog_y1_noexp(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

void
y1_enter(void)
{
    extern void y2(void);

    printf("Called %s\n\n", __func__);

    prog_x1();
    prog_y1_exp();
    prog_y1_noexp();
    x1_y1();
    m1_y1();
    y2();
}

$ cat lib_y2.c
#include <stdio.h>

void
y2(void)
{
    printf("Called %s::%s\n", __FILE__, __func__);
}

$ cat Build.sh
#!/bin/sh

CFLAGS="-Wno-implicit-function-declaration -Wl,--no-as-needed"

cc $CFLAGS -g -fPIC -shared -o lib_x1.so lib_x1.c
cc $CFLAGS -g -fPIC -shared -o lib_y2.so lib_y2.c
cc $CFLAGS -g -fPIC -shared -o lib_y1.so lib_y1.c ./lib_y2.so
cc $CFLAGS -g -fPIC -shared -o lib_m1.so lib_m1.c

#ED="-Wl,--export-dynamic"
cc $CFLAGS $ED -Wl,--rpath,$PWD -o prog prog.c -ldl lib_m1.so

$ sh Build.sh

$ ./prog x
Link map as shown from dl_iterate_phdr() callbacks:
Name =
Name = linux-vdso.so.1
Name = /lib64/libdl.so.2
Name = /home/mtk/tlpi/code/shlibs/dlopen_sym_res_expt/lib_m1.so
Name = /lib64/libc.so.6
Name = /lib64/ld-linux-x86-64.so.2
Name = ./lib_x1.so
Name = ./lib_y1.so
Name = ./lib_y2.so

Called y1_enter

Called lib_x1.c::prog_x1
Called prog.c::prog_y1_exp
Called lib_y1.c::prog_y1_noexp
Called lib_x1.c::x1_y1
Called lib_m1.c::m1_y1
Called lib_y2.c::y2

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: Note that symbol use might keep a dlclose'd object in memory
Michael Kerrisk [Tue, 2 Jul 2019 13:55:09 +0000 (15:55 +0200)] 
dlopen.3: Note that symbol use might keep a dlclose'd object in memory

My earlier commit was in error:

    commit 4a1af09bd1aae1fdfc783dd017cb5bc392dccc1b
    Author: Michael Kerrisk <mtk.manpages@gmail.com>
    Date:   Sat Mar 14 21:40:35 2015 +0100

        dlopen.3: Amend error in description of dlclose() behavior

    -If the reference count drops to zero and no other loaded libraries use
    -symbols in it, then the dynamic library is unloaded.
    +If the reference count drops to zero,
    +then the dynamic library is unloaded.

I doubted the removed text, because it provide little clue about
the scenario. The POSIX dlclose(3) specification actually details
the scenario sufficiently:

       Although  a dlclose() operation is not required to remove
       any functions or data objects  from  the  address  space,
       neither  is  an  implementation prohibited from doing so.
       The only restriction on such a removal is that  no  func‐
       tion nor data object shall be removed to which references
       have been relocated, until or unless all such  references
       are removed. For instance, an executable object file that
       had been loaded with a dlopen() operation specifying  the
       RTLD_GLOBAL flag might provide a target for dynamic relo‐
       cations performed in the processing of other  relocatable
       objects—in  such  environments, an application may assume
       that no relocation, once made, shall be undone or  remade
       unless  the  executable  object file containing the relo‐
       cated object has itself been removed.

Verified by experiment:

$ cat openlibs.c       # Test program

int
main(int argc, char *argv[])
{
    void *libHandle[MAX_LIBS];
    int lcnt;

    if (argc < 2) {
        fprintf(stderr, "Usage: %s lib-path...\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    lcnt = 0;

    for (int j = 1; j < argc; j++) {
        if (argv[j][0] != '-') {
            if (lcnt >= MAX_LIBS) {
                fprintf(stderr, "Too many libraries (limit: %d)\n", MAX_LIBS);
                exit(EXIT_FAILURE);
            }

            printf("[%d] Opening %s\n", lcnt, argv[j]);
            libHandle[lcnt] = dlopen(argv[j], RTLD_NOW | RTLD_GLOBAL);
            if (libHandle[lcnt] == NULL) {
                fprintf(stderr, "dlopen: %s\n", dlerror());
                exit(EXIT_FAILURE);
            }
            lcnt++;

        } else {    /* "-N" closes the Nth handle */

            int i = atoi(&argv[j][1]);
            printf("Closing handle %d\n", i);
            dlclose(libHandle[i]);
        }

        sleep(1);
        printf("\n");
    }

    printf("Program about to exit\n");

    exit(EXIT_SUCCESS);
}

$ cat lib_x1.c

void x1_func(void) { printf("Hello world\n"); }

__attribute__((constructor)) void x1_cstor(void)
{ printf("Called %s\n", __FUNCTION__); }

__attribute__((destructor)) void x1_dstor(void)
{ printf("Called %s\n", __FUNCTION__); }

$ cat lib_y1.c

void y1_func(void) { printf("Hello world\n"); }

__attribute__((constructor)) void y1_cstor(void)
{ printf("Called %s\n", __FUNCTION__); }

__attribute__((destructor)) void y1_dstor(void)
{ printf("Called %s\n", __FUNCTION__); }

static void testref(void) {
    /* The following reference, to a symbol in lib_x1.so shows that
       RTLD_GLOBAL may pin a library when it might otherwise have been
       released with dlclose() */
    extern void x1_func(void);
    x1_func();
}

$ cc -shared -fPIC -o lib_x1.so lib_x1.c
$ cc -shared -fPIC -o lib_y1.so lib_y1.c
$ cc -o openlibs openlibs.c -ldl

$ LD_LIBRARY_PATH=. ./openlibs lib_x1.so lib_y1.so -0 -1
[0] Opening lib_x1.so
Called x1_cstor

[1] Opening lib_y1.so
Called y1_cstor

Closing handle 0

Closing handle 1
Called y1_dstor
Called x1_dstor

Program about to exit
<end program output>

Note that x1_dstor was called only when handle 1 (lib_y1.so) was closed.
But, if we edit lib_y1 to remove the reference to x1_func(), things are
different:

$ cat lib_y1.c      # After editing

void y1_func(void) { printf("Hello world\n"); }

__attribute__((constructor)) void y1_cstor(void)
{ printf("Called %s\n", __FUNCTION__); }

__attribute__((destructor)) void y1_dstor(void)
{ printf("Called %s\n", __FUNCTION__); }

static void testref(void) {
    // extern void x1_func(void);
    // x1_func();
}

$ cc -shared -fPIC -o lib_y1.so lib_y1.c
$ LD_LIBRARY_PATH=. ./openlibs lib_x1.so lib_y1.so -0 -1
[0] Opening lib_x1.so
Called x1_cstor

[1] Opening lib_y1.so
Called y1_cstor

Closing handle 0
Called x1_dstor

Closing handle 1
Called y1_dstor

Program about to exit
<end program output>

This time, x1_dstor was called when handle 0 (lib_x1.so) was closed.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: Clarify that constructors are called only when library is first loaded
Michael Kerrisk [Tue, 2 Jul 2019 13:01:20 +0000 (15:01 +0200)] 
dlopen.3: Clarify that constructors are called only when library is first loaded

And fix a wording error that I introduced back in 2015.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agodlopen.3: On dlclose(), destructors are called when reference count falls to 0
Michael Kerrisk [Tue, 2 Jul 2019 12:56:15 +0000 (14:56 +0200)] 
dlopen.3: On dlclose(), destructors are called when reference count falls to 0

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agogetauxval.3: grfix
Michael Kerrisk [Tue, 2 Jul 2019 08:19:00 +0000 (10:19 +0200)] 
getauxval.3: grfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouser_namespaces.7: Minor rewordings of recently added text
Michael Kerrisk [Mon, 1 Jul 2019 18:44:43 +0000 (20:44 +0200)] 
user_namespaces.7: Minor rewordings of recently added text

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouser_namespaces.7: Minor wording fix to recently added text
Michael Kerrisk [Tue, 2 Jul 2019 04:20:44 +0000 (06:20 +0200)] 
user_namespaces.7: Minor wording fix to recently added text

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouser_namespaces.7: Describe the effect of file-related capabilities inside use namespaces
Michael Kerrisk [Mon, 1 Jul 2019 10:18:44 +0000 (12:18 +0200)] 
user_namespaces.7: Describe the effect of file-related capabilities inside use namespaces

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agouser_namespaces.7: Describe how kernel treats UIDs/GIDs when a process access to...
Michael Kerrisk [Mon, 1 Jul 2019 09:11:19 +0000 (11:11 +0200)] 
user_namespaces.7: Describe how kernel treats UIDs/GIDs when a process access to files

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocapabilities.7: CAP_FOWNER also allows modifying user xattrs on sticky directories
Michael Kerrisk [Mon, 1 Jul 2019 07:48:11 +0000 (09:48 +0200)] 
capabilities.7: CAP_FOWNER also allows modifying user xattrs on sticky directories

See fs/xattr.c::xattr_permission()"

        /*
         * In the user.* namespace, only regular files and directories can have
         * extended attributes. For sticky directories, only the owner and
         * privileged users can write attributes.
         */
        if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) {
                if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
                        return (mask & MAY_WRITE) ? -EPERM : -ENODATA;
                if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) &&
                    (mask & MAY_WRITE) && !inode_owner_or_capable(inode))
                        return -EPERM;
        }

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoxattr.7: s/extended system attributes/system extended attributes/
Michael Kerrisk [Mon, 1 Jul 2019 07:54:42 +0000 (09:54 +0200)] 
xattr.7: s/extended system attributes/system extended attributes/

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoxattr.7: wfix: s/extended user attributes/user extended attributes/
Michael Kerrisk [Mon, 1 Jul 2019 07:52:41 +0000 (09:52 +0200)] 
xattr.7: wfix: s/extended user attributes/user extended attributes/

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agounix.7: Note SCM_RIGHTS interaction with RLIMIT_NOFILE
Michael Kerrisk [Sat, 29 Jun 2019 20:06:10 +0000 (22:06 +0200)] 
unix.7: Note SCM_RIGHTS interaction with RLIMIT_NOFILE

If the file descriptors received in SCM_RIGHTS would cause
the process to its exceed RLIMIT_NOFILE limit, the excess
FDs are discarded.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoipc.5: Remove old link to svipc.7/sysvipc.7 page
Michael Kerrisk [Tue, 25 Jun 2019 04:40:21 +0000 (06:40 +0200)] 
ipc.5: Remove old link to svipc.7/sysvipc.7 page

Long ago, the sysvipc.7 page was called ipc.5, which was both a
misnaming (too general a name) and an inconsistent section. The
page was renamed (to svipc.7) many years ago, and the link with
the old name has probably ceased to be needed. So, remove it.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosvipc.7: Add old name of sysvipc(7) page as a link
Michael Kerrisk [Tue, 25 Jun 2019 04:39:05 +0000 (06:39 +0200)] 
svipc.7: Add old name of sysvipc(7) page as a link

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoclone.2, intro.2, ipc.2, msgctl.2, msgget.2, msgop.2, semctl.2, semget.2, semop.2...
Michael Kerrisk [Tue, 25 Jun 2019 04:38:01 +0000 (06:38 +0200)] 
clone.2, intro.2, ipc.2, msgctl.2, msgget.2, msgop.2, semctl.2, semget.2, semop.2, shmctl.2, shmget.2, shmop.2, ftok.3, proc.5, namespaces.7: Change reference to svipc(7) to sysvipc(7)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosysvipc.7: Minor fixes for page renaming
Michael Kerrisk [Tue, 25 Jun 2019 04:33:16 +0000 (06:33 +0200)] 
sysvipc.7: Minor fixes for page renaming

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosysvipc.7: Rename svipc.7 to sysvipc.7
Michael Kerrisk [Tue, 25 Jun 2019 04:31:50 +0000 (06:31 +0200)] 
sysvipc.7: Rename svipc.7 to sysvipc.7

The name sysvipc is a bit more natural, and is the name used in
/proc/sysvipc.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agopid_namespaces.7: tfix
Michael Kerrisk [Mon, 24 Jun 2019 14:26:51 +0000 (16:26 +0200)] 
pid_namespaces.7: tfix

Reported-by: Guillaume Laporte <guillaume.laporte.adm@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoptrace.2: wfix: s/proper superset/superset/ in "Ptrace access mode checking"
Michael Kerrisk [Fri, 21 Jun 2019 06:04:58 +0000 (08:04 +0200)] 
ptrace.2: wfix: s/proper superset/superset/ in "Ptrace access mode checking"

Reported-by: Alexey Izbyshev <izbyshev@ispras.ru>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>