[Cluster-devel] [PATCH RHEL6] libgfs2: Fix up remove_mtab_entry

Steven Whitehouse swhiteho at redhat.com
Tue Feb 4 12:29:42 UTC 2014


Hi,

Looks good to me,

Steve.

On Tue, 2014-02-04 at 12:25 +0000, Andrew Price wrote:
> mkstemp was creating the temporary mtab file with overly tight
> permissions causing /etc/mtab to end up with an 0600 mode instead of the
> regular 0644. This patch resets the mode to 0644 by calling fchmod on
> the file descriptor returned by mkstemp.
> 
> It also removes a superfluous close() call and sets the temp filename
> char array on initialisation instead of using strcpy().
> 
> Resolves: rhbz#1059853
> 
> Signed-off-by: Andrew Price <anprice at redhat.com>
> ---
>  gfs2/libgfs2/misc.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/gfs2/libgfs2/misc.c b/gfs2/libgfs2/misc.c
> index 3989bf1..8e0ca6f 100644
> --- a/gfs2/libgfs2/misc.c
> +++ b/gfs2/libgfs2/misc.c
> @@ -217,7 +217,7 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
>  {
>  	FILE *mtab, *mtabnew;
>  	struct mntent *mountent;
> -	char mtab_tmpfn[PATH_MAX];
> +	char mtab_tmpfn[] = "/etc/mtab.XXXXXX";
>  	int error, fd;
>  	mode_t mask;
>  
> @@ -225,7 +225,7 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
>  	if (mtab == NULL)
>  		die("Couldn't open /etc/mtab for writing: %s\n",
>  		    strerror(errno));
> -	strcpy(mtab_tmpfn, "/etc/mtab.XXXXXX");
> +
>  	mask = umask(S_IXUSR | S_IRWXG | S_IRWXO);
>  	fd = mkstemp(mtab_tmpfn);
>  	umask(mask);
> @@ -233,6 +233,9 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
>  		die("Couldn't open temporary mtab file for writing: %s\n",
>  		    strerror(errno));
>  
> +	if (fchmod(fd, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH))
> +		die("Couldn't change mode of temporary mtab: %s\n", strerror(errno));
> +
>  	mtabnew = fdopen(fd, "wt");
>  	if (mtabnew == NULL)
>  		die("Couldn't open %s for writing : %s\n", mtab_tmpfn,
> @@ -247,8 +250,7 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
>  	}
>  
>  	endmntent(mtab);
> -	fclose(mtabnew);
> -	close(fd);
> +	fclose(mtabnew); /* Closes underlying fd */
>  	if (rename(mtab_tmpfn, "/etc/mtab"))
>  		fprintf(stderr, "Unable to remove mount entry from mtab.\n");
>  }





More information about the Cluster-devel mailing list