Ignore EPERM when modifying kern.geom.debugflags

Many tests fail when run as a non-root user on FreeBSD.  The failures
all amount to an inability to open files using grub_util_fd_open,
because we cannot set the kern.geom.debugflags sysctl.  This sysctl is
indeed important to allow us to do such things as installing GRUB to the
MBR, but if we need to do that and can't then we will get an error
later.  Enforcing it here is unnecessary and prevents otherwise
perfectly reasonable operations.
This commit is contained in:
Colin Watson 2014-01-17 02:28:46 +00:00
parent 015045471e
commit 049f63824c
2 changed files with 17 additions and 2 deletions

View file

@ -1,3 +1,10 @@
2014-01-19 Colin Watson <cjwatson@ubuntu.com>
* 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 <arvidjaar@gmail.com>
* grub-core/Makefile.am: Build grub_emu_init.[ch] from MODULE_FILES

View file

@ -101,10 +101,18 @@ grub_util_fd_open (const char *os_dev, int flags)
sysctl_flags = sysctl_oldflags | 0x10;
if (! (sysctl_oldflags & 0x10)
&& sysctlbyname ("kern.geom.debugflags", NULL , 0, &sysctl_flags, sysctl_size))
{
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);