Cope with xattr syscalls raising EOPNOTSUPP

ENOTSUP and EOPNOTSUPP are numerically equal on most Linux ports,
but inexplicably differ on PA-RISC (hppa) and possibly other
rare architectures.

Signed-off-by: Simon McVittie <smcv@collabora.com>

Closes: #1275
Approved by: cgwalters
This commit is contained in:
Simon McVittie authored and Atomic Bot committed 2017-10-16 13:08:06 +00:00
1 parent 9503189362
commit a4723dafed
2 files changed
+7 -5

No files matched your search

+6 -4
View File
@@ -85,8 +85,10 @@ ot_check_relabeling (gboolean *can_relabel,
g_autoptr(GBytes) bytes = glnx_fgetxattr_bytes (tmpf.fd, "security.selinux", &local_error);
if (!bytes)
{
/* libglnx preserves errno */
if (G_IN_SET (errno, ENOTSUP, ENODATA))
/* libglnx preserves errno. The EOPNOTSUPP case can't be part of a
* 'case' statement because on most but not all architectures,
* it's numerically equal to ENOTSUP. */
if (G_IN_SET (errno, ENOTSUP, ENODATA) || errno == EOPNOTSUPP)
{
*can_relabel = FALSE;
return TRUE;
@@ -99,7 +101,7 @@ ot_check_relabeling (gboolean *can_relabel,
const guint8 *data = g_bytes_get_data (bytes, &data_len);
if (fsetxattr (tmpf.fd, "security.selinux", data, data_len, 0) < 0)
{
if (errno == ENOTSUP)
if (errno == ENOTSUP || errno == EOPNOTSUPP)
{
*can_relabel = FALSE;
return TRUE;
@@ -122,7 +124,7 @@ ot_check_user_xattrs (gboolean *has_user_xattrs,
if (fsetxattr (tmpf.fd, "user.test", "novalue", strlen ("novalue"), 0) < 0)
{
if (errno == ENOTSUP)
if (errno == ENOTSUP || errno == EOPNOTSUPP)
{
*has_user_xattrs = FALSE;
return TRUE;