From 18b089282b485b30d19b25f901e43df10634b4cf Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Mon, 16 May 2011 09:49:02 -0400 Subject: [PATCH] mount.cifs: pass unadulterated device string to kernel (bz# 702664) --- ...e-original-device-string-all-the-way.patch | 87 +++++++++++++++++++ cifs-utils.spec | 8 +- 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 0001-mount.cifs-Use-original-device-string-all-the-way.patch diff --git a/0001-mount.cifs-Use-original-device-string-all-the-way.patch b/0001-mount.cifs-Use-original-device-string-all-the-way.patch new file mode 100644 index 0000000..4b8dff5 --- /dev/null +++ b/0001-mount.cifs-Use-original-device-string-all-the-way.patch @@ -0,0 +1,87 @@ +From ffac601c45b167a1af1d35561f1c01ab0813cc14 Mon Sep 17 00:00:00 2001 +From: Luk Claes +Date: Fri, 8 Apr 2011 14:13:35 -0400 +Subject: [PATCH] mount.cifs: Use original device string all the way + +Don't construct a device name, but use the original device string +to mount so the device name in /proc/mounts matches the one in +/etc/fstab. + +Signed-off-by: Luk Claes +--- + mount.cifs.c | 27 +++------------------------ + 1 files changed, 3 insertions(+), 24 deletions(-) + +diff --git a/mount.cifs.c b/mount.cifs.c +index 8e1e32b..29b0d4c 100644 +--- a/mount.cifs.c ++++ b/mount.cifs.c +@@ -1673,12 +1673,11 @@ int main(int argc, char **argv) + char *orgoptions = NULL; + char *mountpoint = NULL; + char *options = NULL; +- char *dev_name = NULL, *orig_dev = NULL; ++ char *orig_dev = NULL; + char *currentaddress, *nextaddress; + int rc = 0; + int already_uppercased = 0; + size_t options_size = MAX_OPTIONS_LEN; +- size_t dev_len; + struct parsed_mount_info *parsed_info = NULL; + pid_t pid; + const char *fstype; +@@ -1823,25 +1822,6 @@ int main(int argc, char **argv) + goto mount_exit; + } + +- /* lengths of different strings + slashes + trailing \0 */ +- dev_len = strnlen(parsed_info->host, sizeof(parsed_info->host)) + +- strnlen(parsed_info->share, sizeof(parsed_info->share)) + +- strnlen(parsed_info->prefix, sizeof(parsed_info->prefix)) + +- 2 + 1 + 1 + 1; +- dev_name = calloc(dev_len, 1); +- if (!dev_name) { +- rc = EX_SYSERR; +- goto mount_exit; +- } +- +- /* rebuild device name with forward slashes */ +- strlcpy(dev_name, "//", dev_len); +- strlcat(dev_name, parsed_info->host, dev_len); +- strlcat(dev_name, "/", dev_len); +- strlcat(dev_name, parsed_info->share, dev_len); +- strlcat(dev_name, "/", dev_len); +- strlcat(dev_name, parsed_info->prefix, dev_len); +- + currentaddress = parsed_info->addrlist; + nextaddress = strchr(currentaddress, ','); + if (nextaddress) +@@ -1889,7 +1869,7 @@ mount_retry: + if (parsed_info->verboseflag) + fprintf(stderr, "\n"); + +- rc = check_mtab(thisprogram, dev_name, mountpoint); ++ rc = check_mtab(thisprogram, orig_dev, mountpoint); + if (rc) + goto mount_exit; + +@@ -1900,7 +1880,7 @@ mount_retry: + + if (!parsed_info->fakemnt) { + toggle_dac_capability(0, 1); +- rc = mount(dev_name, ".", fstype, parsed_info->flags, options); ++ rc = mount(orig_dev, ".", fstype, parsed_info->flags, options); + toggle_dac_capability(0, 0); + if (rc == 0) + goto do_mtab; +@@ -1948,7 +1928,6 @@ mount_exit: + memset(parsed_info->password, 0, sizeof(parsed_info->password)); + munmap(parsed_info, sizeof(*parsed_info)); + } +- SAFE_FREE(dev_name); + SAFE_FREE(options); + SAFE_FREE(orgoptions); + return rc; +-- +1.7.4.4 + diff --git a/cifs-utils.spec b/cifs-utils.spec index c7cf085..9c239ef 100644 --- a/cifs-utils.spec +++ b/cifs-utils.spec @@ -3,7 +3,7 @@ Name: cifs-utils Version: 4.9 -Release: 1%{pre_release}%{?dist} +Release: 2%{pre_release}%{?dist} Summary: Utilities for mounting and managing CIFS mounts Group: System Environment/Daemons @@ -13,6 +13,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}%{pre_release}-%{release}-root-%(% Source0: ftp://ftp.samba.org/pub/linux-cifs/cifs-utils/%{name}-%{version}%{pre_release}.tar.bz2 +Patch1: 0001-mount.cifs-Use-original-device-string-all-the-way.patch + BuildRequires: libcap-ng-devel libtalloc-devel krb5-devel keyutils-libs-devel autoconf automake Requires: keyutils @@ -26,6 +28,7 @@ file system. %prep %setup -q -n %{name}-%{version}%{pre_release} +%patch1 -p1 %build %configure --prefix=/usr @@ -47,6 +50,9 @@ rm -rf %{buildroot} %{_mandir}/man8/mount.cifs.8.gz %changelog +* Mon May 16 2011 Jeff Layton 4.9-2 +- mount.cifs: pass unadulterated device string to kernel (bz# 702664) + * Fri Mar 04 2011 Jeff Layton 4.9-1 - update to 4.9