GNU bug report logs - #11245
24.0.95; set-file-selinux-context fails when the filesystem doesn't support contexts

Previous Next

Package: emacs;

Reported by: goeran <at> uddeborg.se

Date: Sun, 15 Apr 2012 11:30:02 UTC

Severity: important

Found in version 24.0.95

Fixed in version 24.0.96

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 11245 in the body.
You can then email your comments to 11245 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#11245; Package emacs. (Sun, 15 Apr 2012 11:30:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to goeran <at> uddeborg.se:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 15 Apr 2012 11:30:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: goeran <at> uddeborg.se
To: bug-gnu-emacs <at> gnu.org
Subject: 24.0.95;
	set-file-selinux-context fails when the filesystem doesn't support
	contexts
Date: Sun, 15 Apr 2012 13:27:51 +0200
After upgrading to emacs to the one in Fedora 17 test release, numbered
24.0.95, I started to get messages about emacs failing to write backup
files, and it writing a %backup%~ file instead.  Checking in the file
system, emacs had successfully made a backup file.  After a bit of
investigation, I believe it has to do with emacs trying to set SELinux
context on a file system which doesn't support it.  In my case, my home
directory is mounted via NFS.

So to reproduce, I do the following, starting in a directory in an NFS
file system:

On the command line:
    freddi$ touch apa
    freddi$ ll -Z apa
    -rw-rw-r--. göran göran system_u:object_r:nfs_t:SystemLow apa
    freddi$ emacs -Q

Then, in emacs:
    M-x s e t - v a r <tab> <return> b a c k u <tab> b
    y <tab> <return> t <return> C-x C-f a p a <return>
    a p a C-x C-s

Now I get an error message:
    Cannot write backup file; backing up in ~/.emacs.d/%backup%~

But there is an (empty) file "apa~", so the backup DID succeed.

My understanding is that the root cause is the function
set-file-selinux-context in fileio.c failing with a file error when the
lsetfilecon() call fails.  But it is not really an error if it fails
with errno set to ENOTSUP.  A system which does support SELinux may very
well have some parts of the file tree where you can't modify the
context.  Such as an NFS home directory.

It seems to me that the case where lsetfilecon() fails with ENOTSUP
should be handled in the same way as if is_selinux_enabled() returned
false in the first place, i.e. just return without any error.  Do I miss
something?



In GNU Emacs 24.0.95.1 (x86_64-redhat-linux-gnu, GTK+ Version 2.24.10)
 of 2012-04-06 on x86-13.phx2.fedoraproject.org
Windowing system distributor `Fedora Project', version 11.0.11002000
Configured using:
 `configure '--build=x86_64-redhat-linux-gnu'
 '--host=x86_64-redhat-linux-gnu' '--program-prefix='
 '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr'
 '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc'
 '--datadir=/usr/share' '--includedir=/usr/include'
 '--libdir=/usr/lib64' '--libexecdir=/usr/libexec'
 '--localstatedir=/var' '--sharedstatedir=/var/lib'
 '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-dbus'
 '--with-gif' '--with-jpeg' '--with-png' '--with-rsvg' '--with-tiff'
 '--with-xft' '--with-xpm' '--with-x-toolkit=gtk' '--with-gpm=no'
 '--with-wide-int' 'build_alias=x86_64-redhat-linux-gnu'
 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-DMAIL_USE_LOCKF -O2 -g
 -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
 --param=ssp-buffer-size=4 -m64 -mtune=generic' 'LDFLAGS=-Wl,-z,relro ''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: sv_SE.utf8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Fundamental

Minor modes in effect:
  tooltip-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: (only . t)

Recent input:
M-x s e t - v a r <tab> <return> b a c k u <tab> b 
<tab> <return> t <return> C-x C-f a p a <return> a 
p a C-x C-s M-x r e p o r t - e m a <tab> <return>

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Saving file /home/göran/apa...
Cannot write backup file; backing up in ~/.emacs.d/%backup%~
Wrote /home/göran/apa

Load-path shadows:
None found.

Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail regexp-opt rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils cus-edit easymenu cus-start cus-load
wid-edit help-fns time-date tooltip ediff-hook vc-hooks lisp-float-type
mwheel x-win x-dnd tool-bar dnd fontset image fringe lisp-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core frame cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew
greek romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer loaddefs
button faces cus-face files text-properties overlay sha1 md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process dbusbind dynamic-setting
system-font-setting font-render-setting move-toolbar gtk x-toolkit x
multi-tty emacs)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#11245; Package emacs. (Mon, 16 Apr 2012 17:52:02 GMT) Full text and rfc822 format available.

Message #8 received at 11245 <at> debbugs.gnu.org (full text, mbox):

From: Glenn Morris <rgm <at> gnu.org>
To: Karel Klic <kklic <at> redhat.com>
Cc: 11245 <at> debbugs.gnu.org, goeran <at> uddeborg.se
Subject: Re: bug#11245: 24.0.95;
	set-file-selinux-context fails when the filesystem doesn't support
	contexts
Date: Mon, 16 Apr 2012 13:51:16 -0400
Hi Karel,

We received this bug report about the SELinux support that you wrote for
Emacs. Could you take a look? Just hit reply-all to respond to the
report. Thanks.

http://debbugs.gnu.org/11245

goeran <at> uddeborg.se wrote:

> After upgrading to emacs to the one in Fedora 17 test release, numbered
> 24.0.95, I started to get messages about emacs failing to write backup
> files, and it writing a %backup%~ file instead.  Checking in the file
> system, emacs had successfully made a backup file.  After a bit of
> investigation, I believe it has to do with emacs trying to set SELinux
> context on a file system which doesn't support it.  In my case, my home
> directory is mounted via NFS.
>
> So to reproduce, I do the following, starting in a directory in an NFS
> file system:
>
> On the command line:
>     freddi$ touch apa
>     freddi$ ll -Z apa
>     -rw-rw-r--. göran göran system_u:object_r:nfs_t:SystemLow apa
>     freddi$ emacs -Q
>
> Then, in emacs:
>     M-x s e t - v a r <tab> <return> b a c k u <tab> b
>     y <tab> <return> t <return> C-x C-f a p a <return>
>     a p a C-x C-s
>
> Now I get an error message:
>     Cannot write backup file; backing up in ~/.emacs.d/%backup%~
>
> But there is an (empty) file "apa~", so the backup DID succeed.
>
> My understanding is that the root cause is the function
> set-file-selinux-context in fileio.c failing with a file error when the
> lsetfilecon() call fails.  But it is not really an error if it fails
> with errno set to ENOTSUP.  A system which does support SELinux may very
> well have some parts of the file tree where you can't modify the
> context.  Such as an NFS home directory.
>
> It seems to me that the case where lsetfilecon() fails with ENOTSUP
> should be handled in the same way as if is_selinux_enabled() returned
> false in the first place, i.e. just return without any error.  Do I miss
> something?
>
>
>
> In GNU Emacs 24.0.95.1 (x86_64-redhat-linux-gnu, GTK+ Version 2.24.10)
>  of 2012-04-06 on x86-13.phx2.fedoraproject.org
> Windowing system distributor `Fedora Project', version 11.0.11002000
> Configured using:
>  `configure '--build=x86_64-redhat-linux-gnu'
>  '--host=x86_64-redhat-linux-gnu' '--program-prefix='
>  '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr'
>  '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc'
>  '--datadir=/usr/share' '--includedir=/usr/include'
>  '--libdir=/usr/lib64' '--libexecdir=/usr/libexec'
>  '--localstatedir=/var' '--sharedstatedir=/var/lib'
>  '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-dbus'
>  '--with-gif' '--with-jpeg' '--with-png' '--with-rsvg' '--with-tiff'
>  '--with-xft' '--with-xpm' '--with-x-toolkit=gtk' '--with-gpm=no'
>  '--with-wide-int' 'build_alias=x86_64-redhat-linux-gnu'
>  'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-DMAIL_USE_LOCKF -O2 -g
>  -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
>  --param=ssp-buffer-size=4 -m64 -mtune=generic' 'LDFLAGS=-Wl,-z,relro ''
>
> Important settings:
>   value of $LC_ALL: nil
>   value of $LC_COLLATE: nil
>   value of $LC_CTYPE: nil
>   value of $LC_MESSAGES: nil
>   value of $LC_MONETARY: nil
>   value of $LC_NUMERIC: nil
>   value of $LC_TIME: nil
>   value of $LANG: sv_SE.utf8
>   value of $XMODIFIERS: nil
>   locale-coding-system: utf-8-unix
>   default enable-multibyte-characters: t
>
> Major mode: Fundamental
>
> Minor modes in effect:
>   tooltip-mode: t
>   mouse-wheel-mode: t
>   tool-bar-mode: t
>   menu-bar-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   blink-cursor-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>   line-number-mode: t
>   transient-mark-mode: (only . t)
>
> Recent input:
> M-x s e t - v a r <tab> <return> b a c k u <tab> b 
> <tab> <return> t <return> C-x C-f a p a <return> a 
> p a C-x C-s M-x r e p o r t - e m a <tab> <return>
>
> Recent messages:
> For information about GNU Emacs and the GNU system, type C-h C-a.
> Saving file /home/göran/apa...
> Cannot write backup file; backing up in ~/.emacs.d/%backup%~
> Wrote /home/göran/apa
>
> Load-path shadows:
> None found.
>
> Features:
> (shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
> mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
> gmm-utils mailheader sendmail regexp-opt rfc2047 rfc2045 ietf-drums
> mm-util mail-prsvr mail-utils cus-edit easymenu cus-start cus-load
> wid-edit help-fns time-date tooltip ediff-hook vc-hooks lisp-float-type
> mwheel x-win x-dnd tool-bar dnd fontset image fringe lisp-mode register
> page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
> font-lock syntax facemenu font-core frame cham georgian utf-8-lang
> misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew
> greek romanian slovak czech european ethiopic indian cyrillic chinese
> case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer loaddefs
> button faces cus-face files text-properties overlay sha1 md5 base64
> format env code-pages mule custom widget hashtable-print-readable
> backquote make-network-process dbusbind dynamic-setting
> system-font-setting font-render-setting move-toolbar gtk x-toolkit x
> multi-tty emacs)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#11245; Package emacs. (Thu, 19 Apr 2012 17:38:01 GMT) Full text and rfc822 format available.

Message #11 received at 11245 <at> debbugs.gnu.org (full text, mbox):

From: Glenn Morris <rgm <at> gnu.org>
To: 11245 <at> debbugs.gnu.org
Cc: goeran <at> uddeborg.se
Subject: Re: bug#11245: 24.0.95;
	set-file-selinux-context fails when the filesystem doesn't support
	contexts
Date: Thu, 19 Apr 2012 13:36:41 -0400
By the way, I think this is something that should be fixed for 24.1.
Maybe the actual fix is simple, thanks to the very clear report.
Just change to using something like (totally untested)

       if (fail && errno != ENOTSUP)
           report_file_error ("Doing lsetfilecon", Fcons (absname, Qnil));

?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#11245; Package emacs. (Thu, 19 Apr 2012 17:41:01 GMT) Full text and rfc822 format available.

Message #14 received at 11245 <at> debbugs.gnu.org (full text, mbox):

From: Glenn Morris <rgm <at> gnu.org>
To: 11245 <at> debbugs.gnu.org
Cc: goeran <at> uddeborg.se
Subject: Re: bug#11245: 24.0.95;
	set-file-selinux-context fails when the filesystem doesn't support
	contexts
Date: Thu, 19 Apr 2012 13:39:43 -0400
PS as a general comment, should a failure to preserve file attributes /
selinux context really be treated as an error when backing up a file?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#11245; Package emacs. (Fri, 20 Apr 2012 17:31:02 GMT) Full text and rfc822 format available.

Message #17 received at 11245 <at> debbugs.gnu.org (full text, mbox):

From: Glenn Morris <rgm <at> gnu.org>
To: goeran <at> uddeborg.se
Cc: 11245 <at> debbugs.gnu.org
Subject: Re: bug#11245: 24.0.95;
	set-file-selinux-context fails when the filesystem doesn't support
	contexts
Date: Fri, 20 Apr 2012 13:29:31 -0400
I tested this patch with the scenario you describe (using
backup-by-copying = t) and it works for me. I will commit it soon.

*** src/fileio.c	2012-02-25 09:07:23 +0000
--- src/fileio.c	2012-04-20 17:26:15 +0000
***************
*** 2046,2052 ****
      {
        /* Set the modified context back to the file. */
        fail = fsetfilecon (ofd, con);
!       if (fail)
  	report_file_error ("Doing fsetfilecon", Fcons (newname, Qnil));
  
        freecon (con);
--- 2046,2052 ----
      {
        /* Set the modified context back to the file. */
        fail = fsetfilecon (ofd, con);
!       if (fail && errno != ENOTSUP)
  	report_file_error ("Doing fsetfilecon", Fcons (newname, Qnil));
  
        freecon (con);
***************
*** 2920,2926 ****
  	  /* Set the modified context back to the file. */
  	  fail = lsetfilecon (SSDATA (encoded_absname),
  			      context_str (parsed_con));
! 	  if (fail)
  	    report_file_error ("Doing lsetfilecon", Fcons (absname, Qnil));
  
  	  context_free (parsed_con);
--- 2920,2926 ----
  	  /* Set the modified context back to the file. */
  	  fail = lsetfilecon (SSDATA (encoded_absname),
  			      context_str (parsed_con));
! 	  if (fail && errno != ENOTSUP)
  	    report_file_error ("Doing lsetfilecon", Fcons (absname, Qnil));
  
  	  context_free (parsed_con);





bug marked as fixed in version 24.0.96, send any further explanations to 11245 <at> debbugs.gnu.org and goeran <at> uddeborg.se Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Fri, 20 Apr 2012 17:37:01 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 19 May 2012 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 12 years and 184 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.