pam_zfs_key: malloc and mlock/munlock won't match
commit7cc5cb8083f427d93afaaf4409f36a6f9f35acab
authorAttila Fülöp <attila@fueloep.org>
Thu, 21 Oct 2021 10:17:47 +0000 (21 12:17 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 22 Oct 2021 18:42:34 +0000 (22 11:42 -0700)
tree6b61c4ea686c3d2abf8ea6ea9157b108ed0d9a4d
parent50292e2545bdf4886abe096ceede0cd1d95f49b0
pam_zfs_key: malloc and mlock/munlock won't match

mlock(2) and munlock(2) operate on memory pages whereas malloc(3)
does not. So if you munlock(2) a malloced memory region, the whole
page containing it is freed. Since this page may contain another
malloced and mlocked memory region, used as a password buffer by a
concurrent running instance of pam_zfs_key, there is a slight chance
of leaking passwords. By using mmap(2) we avoid such problems since
it will return whole pages on page aligned addresses.

Although the above concern may be mostly academical, it is still
better to use mmap(2) for allocating memory since the FreeBSD
documentation suggests to call mlock(2) and munlock(2) on page
aligned addresses, and other implementations even require it.

While here, remove duplicate code in alloc_pw_string() by calling
alloc_pw_size().

Reviewed-by: Felix Dörre <felix@dogcraft.de>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Attila Fülöp <attila@fueloep.org>
Closes #12665
contrib/pam_zfs_key/pam_zfs_key.c