Bug 1182463
| Summary: | "mknod-b", "mknod-c", and "mkfifo" do not strip non-permissions bits from "mode" | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Chao Zhang <chazhang> |
| Component: | libguestfs | Assignee: | Richard W.M. Jones <rjones> |
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> |
| Severity: | low | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 7.1 | CC: | huzhan, leiwang, mbooth, ptoscano, wshi |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | libguestfs-1.28.1-1.25.el7 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2015-11-19 06:59:26 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
As you can see and it is also documented, "mknod-b", "mknod-c", and "mkfifo" are just wrappers to "mknod", just adding the bit for the node type (block device, character device, fifo). If they are used correctly, i.e. just passing permissions as mode, they behave as described, so I don't consider this a big issue. In any case, patch posted: https://www.redhat.com/archives/libguestfs/2015-January/msg00040.html Fixed upstream with https://github.com/libguestfs/libguestfs/commit/8b9ca28e111e38eafe8db7265e7fe18c5f31b460 Verified with libguestfs-1.28.1-1.29.el7 Steps to verify: 1. use mknod, mknod-b, mknod-c to create device ><fs> mknod-c 0060777 8 1 /test_mknod_c mknod-c 0060777 8 1 /test_mknod_c libguestfs: error: mknod_c: 60777: mode must specify only file permission bits ><fs> mknod-b 0060777 8 1 /test_mknod_b libguestfs: error: mknod_b: 60777: mode must specify only file permission bits ><fs> mkfifo 0010777 /test_mkfifo libguestfs: error: mkfifo: 10777: mode must specify only file permission bits ><fs> mknod-c 0777 8 1 /test_mknod_c ><fs> mknod-b 0777 8 1 /test_mknod_b ><fs> mkfifo 0777 /test_mkfifo ><fs> ll / prwxr-xr-x 1 root root 0 May 6 05:22 test_mkfifo brwxr-xr-x 1 root root 8, 1 May 6 05:22 test_mknod_b crwxr-xr-x 1 root root 8, 1 May 6 05:18 test_mknod_c It pops up an error when the mode includes non-permissions bits. So fixed. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2015-2183.html |
Description of problem: The way libguestfs handle "mode" in "mknod-b" "mknod-c" "mkfifo" have some bugs. The source code are: int do_mkfifo (int mode, const char *path) { return do_mknod (mode | S_IFIFO, 0, 0, path); } int do_mknod_b (int mode, int devmajor, int devminor, const char *path) { return do_mknod (mode | S_IFBLK, devmajor, devminor, path); } int do_mknod_c (int mode, int devmajor, int devminor, const char *path) { return do_mknod (mode | S_IFCHR, devmajor, devminor, path); } /usr/include/bits/stat.h #define __S_IFCHR 0020000 /* Character device. */ #define __S_IFBLK 0060000 /* Block device. */ #define __S_IFIFO 0010000 /* FIFO. */ "mknod-c 0060XXX" == "mknod 0060XXX", In this case, "mknod-c" will create a block device. "mkfifo 0000XXX" == "mkfifo 0010XXX", In this case, returning an error would be better. Version-Release number of selected component (if applicable): libguestfs-tools-c-1.28.1-1.17.el7.x86_64 How reproducible: 100% Steps to Reproduce: 1. create a img, and add the img # guestfish -N fs:ext3 2. use mknod, mknod-b, mknod-c to create device ><fs> mknod-c 0060777 8 1 /test_mknod_c ><fs> mkfifo 0000777 /test_mkfifo ><fs> ll / total 17 drwxr-xr-x 3 root root 1024 Jan 15 04:29 . drwxr-xr-x 19 root root 4096 Jan 15 03:40 .. drwx------ 2 root root 12288 Jan 15 03:41 lost+found prwxr-xr-x 1 root root 0 Jan 15 04:29 test_mkfifo brwxr-xr-x 1 root root 8, 1 Jan 15 04:28 test_mknod_c Actual results: mknod-c create a block device, and mkfifo create a fifo device when given a wrong mode. Expected results: If the mode doesn't match the device mode, libguestfs returns an "Invalid argument" error. Additional info: ...