diff --git a/ChangeLog b/ChangeLog index 4688ff4e6..10abfe28f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-01-19 Colin Watson + + * grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Ignore + EPERM when modifying kern.geom.debugflags. It is only a problem for + such things as installing GRUB to the MBR, in which case there'll be + an error later anyway, not for opening files during tests. + 2014-01-18 Andrey Borzenkov * grub-core/Makefile.am: Build grub_emu_init.[ch] from MODULE_FILES diff --git a/grub-core/osdep/freebsd/hostdisk.c b/grub-core/osdep/freebsd/hostdisk.c index eb202dcc8..6145d0735 100644 --- a/grub-core/osdep/freebsd/hostdisk.c +++ b/grub-core/osdep/freebsd/hostdisk.c @@ -102,8 +102,16 @@ grub_util_fd_open (const char *os_dev, int flags) if (! (sysctl_oldflags & 0x10) && sysctlbyname ("kern.geom.debugflags", NULL , 0, &sysctl_flags, sysctl_size)) { - grub_error (GRUB_ERR_BAD_DEVICE, "cannot set flags of sysctl kern.geom.debugflags"); - return GRUB_UTIL_FD_INVALID; + if (errno == EPERM) + /* Running as an unprivileged user; don't worry about restoring + flags, although if we try to write to anything interesting such + as the MBR then we may fail later. */ + sysctl_oldflags = 0x10; + else + { + grub_error (GRUB_ERR_BAD_DEVICE, "cannot set flags of sysctl kern.geom.debugflags"); + return GRUB_UTIL_FD_INVALID; + } } ret = open (os_dev, flags, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR);