Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Jan 2017 03:38:28 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-amd64@FreeBSD.org
Subject:   [Bug 216127] sbin/restore doesn't honour extended attributes (extattr on ufs)
Message-ID:  <bug-216127-6-87ncrluQOw@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-216127-6@https.bugs.freebsd.org/bugzilla/>
References:  <bug-216127-6@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D216127

Conrad Meyer <cem@freebsd.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mckusick@FreeBSD.org

--- Comment #3 from Conrad Meyer <cem@freebsd.org> ---
The kernel code (e.g. ffs_findextattr) indicates that EA names are not, in
fact, nul-terminated.  So the headers restore uses are wrong, as is the res=
tore
code.  This piece of kernel code hasn't changed substantially since the ear=
ly
2000s.

The misleading header comment and macros that reference ea_name as if it is=
 a
nul-terminated string were introduced in 2007 in r167010.  It immediately
precedes r167011, which introduced extattr support to restore.

ea_name will *happen* to be nul-terminated when ea_namelength % 8 =3D=3D 1,=
 like in
your "m" example.  This is because `sizeof(uint32_t) + 3 * sizeof(uint8_t) +
strlen(ea_name)` is padded to multiples of 8 bytes, and the padding is alwa=
ys
zeroed.

Well, there's a long time between ~2002 and 2007.  Maybe Kirk just forgot t=
hat
ea_name wasn't nul-terminated, or didn't try any keys with length =3D=3D 1 =
(mod 8).

I propose the following actions:

* Fix the ufs/extattr.h documentation for ea_name, and remove
EXTATTR_SET_LENGTHS macro (unused) entirely (it uses strlen(ea_name))
* Fix accompanying documentation in extattr.9, fs.5.
* Merge set_extattr_file(), set_extattr_link(), and set_extattr_fd() in res=
tore
and fix uses of ea_name that assume nul-termination.
* Finally, perform the simplification that was proposed in the r167010 comm=
it
log.

I'll draw up some patches.

--=20
You are receiving this mail because:
You are on the CC list for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-216127-6-87ncrluQOw>