* gnu/packages/patches/util-linux-CVE-2021-3995.patch, gnu/packages/patches/util-linux-CVE-2021-3996.patch: New files. * gnu/local.mk (dist_patch_DATA): Add them. * gnu/packages/linux.scm (util-linux)[replacement]: New field. (util-linux/fixed): New variable.
		
			
				
	
	
		
			233 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Fix CVE-2021-3996:
 | |
| 
 | |
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3996
 | |
| https://seclists.org/oss-sec/2022/q1/66
 | |
| 
 | |
| Patch copied from upstream source repository:
 | |
| 
 | |
| https://github.com/util-linux/util-linux/commit/018a10907fa9885093f6d87401556932c2d8bd2b
 | |
| 
 | |
| From 018a10907fa9885093f6d87401556932c2d8bd2b Mon Sep 17 00:00:00 2001
 | |
| From: Karel Zak <kzak@redhat.com>
 | |
| Date: Tue, 4 Jan 2022 10:54:20 +0100
 | |
| Subject: [PATCH] libmount: fix (deleted) suffix issue [CVE-2021-3996]
 | |
| 
 | |
| This issue is related to parsing the /proc/self/mountinfo file allows an
 | |
| unprivileged user to unmount other user's filesystems that are either
 | |
| world-writable themselves or mounted in a world-writable directory.
 | |
| 
 | |
| The support for "(deleted)" is no more necessary as the Linux kernel does
 | |
| not use it in /proc/self/mountinfo and /proc/self/mount files anymore.
 | |
| 
 | |
| Signed-off-by: Karel Zak <kzak@redhat.com>
 | |
| ---
 | |
|  libmount/src/tab_parse.c                            |  5 -----
 | |
|  tests/expected/findmnt/filter-options               |  1 -
 | |
|  tests/expected/findmnt/filter-options-nameval-neg   |  3 +--
 | |
|  tests/expected/findmnt/filter-types-neg             |  1 -
 | |
|  tests/expected/findmnt/outputs-default              |  3 +--
 | |
|  tests/expected/findmnt/outputs-force-tree           |  3 +--
 | |
|  tests/expected/findmnt/outputs-kernel               |  3 +--
 | |
|  tests/expected/libmount/tabdiff-mount               |  1 -
 | |
|  tests/expected/libmount/tabdiff-move                |  1 -
 | |
|  tests/expected/libmount/tabdiff-remount             |  1 -
 | |
|  tests/expected/libmount/tabdiff-umount              |  1 -
 | |
|  tests/expected/libmount/tabfiles-parse-mountinfo    | 11 -----------
 | |
|  tests/expected/libmount/tabfiles-py-parse-mountinfo | 11 -----------
 | |
|  tests/ts/findmnt/files/mountinfo                    |  1 -
 | |
|  tests/ts/findmnt/files/mountinfo-nonroot            |  1 -
 | |
|  tests/ts/libmount/files/mountinfo                   |  1 -
 | |
|  16 files changed, 4 insertions(+), 44 deletions(-)
 | |
| 
 | |
| diff --git a/libmount/src/tab_parse.c b/libmount/src/tab_parse.c
 | |
| index 917779ab6..4407f9c9c 100644
 | |
| --- a/libmount/src/tab_parse.c
 | |
| +++ b/libmount/src/tab_parse.c
 | |
| @@ -227,11 +227,6 @@ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, const char *s)
 | |
|  		goto fail;
 | |
|  	}
 | |
|  
 | |
| -	/* remove "\040(deleted)" suffix */
 | |
| -	p = (char *) endswith(fs->target, PATH_DELETED_SUFFIX);
 | |
| -	if (p && *p)
 | |
| -		*p = '\0';
 | |
| -
 | |
|  	s = skip_separator(s);
 | |
|  
 | |
|  	/* (6) vfs options (fs-independent) */
 | |
| diff --git a/tests/expected/findmnt/filter-options b/tests/expected/findmnt/filter-options
 | |
| index 2606bce76..97b0ead0a 100644
 | |
| --- a/tests/expected/findmnt/filter-options
 | |
| +++ b/tests/expected/findmnt/filter-options
 | |
| @@ -28,5 +28,4 @@ TARGET                       SOURCE           FSTYPE                OPTIONS
 | |
|  /home/kzak/.gvfs             gvfs-fuse-daemon fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500
 | |
|  /var/lib/nfs/rpc_pipefs      sunrpc           rpc_pipefs            rw,relatime
 | |
|  /mnt/sounds                  //foo.home/bar/  cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -/mnt/foo                     /fooooo          bar                   rw,relatime
 | |
|  rc=0
 | |
| diff --git a/tests/expected/findmnt/filter-options-nameval-neg b/tests/expected/findmnt/filter-options-nameval-neg
 | |
| index 5471d65af..f0467ef75 100644
 | |
| --- a/tests/expected/findmnt/filter-options-nameval-neg
 | |
| +++ b/tests/expected/findmnt/filter-options-nameval-neg
 | |
| @@ -29,6 +29,5 @@ TARGET                         SOURCE                FSTYPE                OPTIO
 | |
|  |-/home/kzak                   /dev/mapper/kzak-home ext4                  rw,noatime,barrier=1,data=ordered
 | |
|  | `-/home/kzak/.gvfs           gvfs-fuse-daemon      fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500
 | |
|  |-/var/lib/nfs/rpc_pipefs      sunrpc                rpc_pipefs            rw,relatime
 | |
| -|-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -`-/mnt/foo                     /fooooo               bar                   rw,relatime
 | |
| +`-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
|  rc=0
 | |
| diff --git a/tests/expected/findmnt/filter-types-neg b/tests/expected/findmnt/filter-types-neg
 | |
| index 2606bce76..97b0ead0a 100644
 | |
| --- a/tests/expected/findmnt/filter-types-neg
 | |
| +++ b/tests/expected/findmnt/filter-types-neg
 | |
| @@ -28,5 +28,4 @@ TARGET                       SOURCE           FSTYPE                OPTIONS
 | |
|  /home/kzak/.gvfs             gvfs-fuse-daemon fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500
 | |
|  /var/lib/nfs/rpc_pipefs      sunrpc           rpc_pipefs            rw,relatime
 | |
|  /mnt/sounds                  //foo.home/bar/  cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -/mnt/foo                     /fooooo          bar                   rw,relatime
 | |
|  rc=0
 | |
| diff --git a/tests/expected/findmnt/outputs-default b/tests/expected/findmnt/outputs-default
 | |
| index 59495797b..01599355e 100644
 | |
| --- a/tests/expected/findmnt/outputs-default
 | |
| +++ b/tests/expected/findmnt/outputs-default
 | |
| @@ -30,6 +30,5 @@ TARGET                         SOURCE                FSTYPE                OPTIO
 | |
|  |-/home/kzak                   /dev/mapper/kzak-home ext4                  rw,noatime,barrier=1,data=ordered
 | |
|  | `-/home/kzak/.gvfs           gvfs-fuse-daemon      fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500
 | |
|  |-/var/lib/nfs/rpc_pipefs      sunrpc                rpc_pipefs            rw,relatime
 | |
| -|-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -`-/mnt/foo                     /fooooo               bar                   rw,relatime
 | |
| +`-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
|  rc=0
 | |
| diff --git a/tests/expected/findmnt/outputs-force-tree b/tests/expected/findmnt/outputs-force-tree
 | |
| index 59495797b..01599355e 100644
 | |
| --- a/tests/expected/findmnt/outputs-force-tree
 | |
| +++ b/tests/expected/findmnt/outputs-force-tree
 | |
| @@ -30,6 +30,5 @@ TARGET                         SOURCE                FSTYPE                OPTIO
 | |
|  |-/home/kzak                   /dev/mapper/kzak-home ext4                  rw,noatime,barrier=1,data=ordered
 | |
|  | `-/home/kzak/.gvfs           gvfs-fuse-daemon      fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500
 | |
|  |-/var/lib/nfs/rpc_pipefs      sunrpc                rpc_pipefs            rw,relatime
 | |
| -|-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -`-/mnt/foo                     /fooooo               bar                   rw,relatime
 | |
| +`-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
|  rc=0
 | |
| diff --git a/tests/expected/findmnt/outputs-kernel b/tests/expected/findmnt/outputs-kernel
 | |
| index 59495797b..01599355e 100644
 | |
| --- a/tests/expected/findmnt/outputs-kernel
 | |
| +++ b/tests/expected/findmnt/outputs-kernel
 | |
| @@ -30,6 +30,5 @@ TARGET                         SOURCE                FSTYPE                OPTIO
 | |
|  |-/home/kzak                   /dev/mapper/kzak-home ext4                  rw,noatime,barrier=1,data=ordered
 | |
|  | `-/home/kzak/.gvfs           gvfs-fuse-daemon      fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500
 | |
|  |-/var/lib/nfs/rpc_pipefs      sunrpc                rpc_pipefs            rw,relatime
 | |
| -|-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -`-/mnt/foo                     /fooooo               bar                   rw,relatime
 | |
| +`-/mnt/sounds                  //foo.home/bar/       cifs                  rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
|  rc=0
 | |
| diff --git a/tests/expected/libmount/tabdiff-mount b/tests/expected/libmount/tabdiff-mount
 | |
| index 420aeacd5..3c18f8dc4 100644
 | |
| --- a/tests/expected/libmount/tabdiff-mount
 | |
| +++ b/tests/expected/libmount/tabdiff-mount
 | |
| @@ -1,3 +1,2 @@
 | |
|  /dev/mapper/kzak-home on /home/kzak: MOUNTED
 | |
| -/fooooo on /mnt/foo: MOUNTED
 | |
|  tmpfs on /mnt/test/foo
 | |
| bar: MOUNTED
 | |
| diff --git a/tests/expected/libmount/tabdiff-move b/tests/expected/libmount/tabdiff-move
 | |
| index 24f9bc791..95820d93e 100644
 | |
| --- a/tests/expected/libmount/tabdiff-move
 | |
| +++ b/tests/expected/libmount/tabdiff-move
 | |
| @@ -1,3 +1,2 @@
 | |
|  //foo.home/bar/ on /mnt/music: MOVED to /mnt/music
 | |
| -/fooooo on /mnt/foo: UMOUNTED
 | |
|  tmpfs on /mnt/test/foo
 | |
| bar: UMOUNTED
 | |
| diff --git a/tests/expected/libmount/tabdiff-remount b/tests/expected/libmount/tabdiff-remount
 | |
| index 82ebeab39..876bfd953 100644
 | |
| --- a/tests/expected/libmount/tabdiff-remount
 | |
| +++ b/tests/expected/libmount/tabdiff-remount
 | |
| @@ -1,4 +1,3 @@
 | |
|  /dev/mapper/kzak-home on /home/kzak: REMOUNTED from 'rw,noatime,barrier=1,data=ordered' to 'ro,noatime,barrier=1,data=ordered'
 | |
|  //foo.home/bar/ on /mnt/sounds: REMOUNTED from 'rw,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344' to 'ro,relatime,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344'
 | |
| -/fooooo on /mnt/foo: UMOUNTED
 | |
|  tmpfs on /mnt/test/foo
 | |
| bar: UMOUNTED
 | |
| diff --git a/tests/expected/libmount/tabdiff-umount b/tests/expected/libmount/tabdiff-umount
 | |
| index a3e0fe48a..c7be725b9 100644
 | |
| --- a/tests/expected/libmount/tabdiff-umount
 | |
| +++ b/tests/expected/libmount/tabdiff-umount
 | |
| @@ -1,3 +1,2 @@
 | |
|  /dev/mapper/kzak-home on /home/kzak: UMOUNTED
 | |
| -/fooooo on /mnt/foo: UMOUNTED
 | |
|  tmpfs on /mnt/test/foo
 | |
| bar: UMOUNTED
 | |
| diff --git a/tests/expected/libmount/tabfiles-parse-mountinfo b/tests/expected/libmount/tabfiles-parse-mountinfo
 | |
| index 47eb77006..d5ba5248e 100644
 | |
| --- a/tests/expected/libmount/tabfiles-parse-mountinfo
 | |
| +++ b/tests/expected/libmount/tabfiles-parse-mountinfo
 | |
| @@ -351,17 +351,6 @@ id:     47
 | |
|  parent: 20
 | |
|  devno:  0:38
 | |
|  ------ fs:
 | |
| -source: /fooooo
 | |
| -target: /mnt/foo
 | |
| -fstype: bar
 | |
| -optstr: rw,relatime
 | |
| -VFS-optstr: rw,relatime
 | |
| -FS-opstr: rw
 | |
| -root:   /
 | |
| -id:     48
 | |
| -parent: 20
 | |
| -devno:  0:39
 | |
| ------- fs:
 | |
|  source: tmpfs
 | |
|  target: /mnt/test/foo
 | |
| bar
 | |
|  fstype: tmpfs
 | |
| diff --git a/tests/expected/libmount/tabfiles-py-parse-mountinfo b/tests/expected/libmount/tabfiles-py-parse-mountinfo
 | |
| index 47eb77006..d5ba5248e 100644
 | |
| --- a/tests/expected/libmount/tabfiles-py-parse-mountinfo
 | |
| +++ b/tests/expected/libmount/tabfiles-py-parse-mountinfo
 | |
| @@ -351,17 +351,6 @@ id:     47
 | |
|  parent: 20
 | |
|  devno:  0:38
 | |
|  ------ fs:
 | |
| -source: /fooooo
 | |
| -target: /mnt/foo
 | |
| -fstype: bar
 | |
| -optstr: rw,relatime
 | |
| -VFS-optstr: rw,relatime
 | |
| -FS-opstr: rw
 | |
| -root:   /
 | |
| -id:     48
 | |
| -parent: 20
 | |
| -devno:  0:39
 | |
| ------- fs:
 | |
|  source: tmpfs
 | |
|  target: /mnt/test/foo
 | |
| bar
 | |
|  fstype: tmpfs
 | |
| diff --git a/tests/ts/findmnt/files/mountinfo b/tests/ts/findmnt/files/mountinfo
 | |
| index 475ea1a33..ff1e664a8 100644
 | |
| --- a/tests/ts/findmnt/files/mountinfo
 | |
| +++ b/tests/ts/findmnt/files/mountinfo
 | |
| @@ -30,4 +30,3 @@
 | |
|  44 41 0:36 / /home/kzak/.gvfs rw,nosuid,nodev,relatime - fuse.gvfs-fuse-daemon gvfs-fuse-daemon rw,user_id=500,group_id=500
 | |
|  45 20 0:37 / /var/lib/nfs/rpc_pipefs rw,relatime - rpc_pipefs sunrpc rw
 | |
|  47 20 0:38 / /mnt/sounds rw,relatime - cifs //foo.home/bar/ rw,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -48 20 0:39 / /mnt/foo\040(deleted) rw,relatime - bar /fooooo rw
 | |
| diff --git a/tests/ts/findmnt/files/mountinfo-nonroot b/tests/ts/findmnt/files/mountinfo-nonroot
 | |
| index e15b46701..87b421d2e 100644
 | |
| --- a/tests/ts/findmnt/files/mountinfo-nonroot
 | |
| +++ b/tests/ts/findmnt/files/mountinfo-nonroot
 | |
| @@ -29,4 +29,3 @@
 | |
|  44 41 0:36 / /home/kzak/.gvfs rw,nosuid,nodev,relatime - fuse.gvfs-fuse-daemon gvfs-fuse-daemon rw,user_id=500,group_id=500
 | |
|  45 20 0:37 / /var/lib/nfs/rpc_pipefs rw,relatime - rpc_pipefs sunrpc rw
 | |
|  47 20 0:38 / /mnt/sounds rw,relatime - cifs //foo.home/bar/ rw,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -48 20 0:39 / /mnt/foo\040(deleted) rw,relatime - bar /fooooo rw
 | |
| diff --git a/tests/ts/libmount/files/mountinfo b/tests/ts/libmount/files/mountinfo
 | |
| index c06307183..2b0174048 100644
 | |
| --- a/tests/ts/libmount/files/mountinfo
 | |
| +++ b/tests/ts/libmount/files/mountinfo
 | |
| @@ -30,5 +30,4 @@
 | |
|  44 41 0:36 / /home/kzak/.gvfs rw,nosuid,nodev,relatime - fuse.gvfs-fuse-daemon gvfs-fuse-daemon rw,user_id=500,group_id=500
 | |
|  45 20 0:37 / /var/lib/nfs/rpc_pipefs rw,relatime - rpc_pipefs sunrpc rw
 | |
|  47 20 0:38 / /mnt/sounds rw,relatime - cifs //foo.home/bar/ rw,unc=\\foo.home\bar,username=kzak,domain=SRGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.111.1,posixpaths,serverino,acl,rsize=16384,wsize=57344
 | |
| -48 20 0:39 / /mnt/foo\040(deleted) rw,relatime - bar /fooooo rw
 | |
|  49 20 0:56 / /mnt/test/foo
 | |
| bar rw,relatime shared:323 - tmpfs tmpfs rw
 | |
| -- 
 | |
| 2.34.0
 | |
| 
 |