ANDROID: overlayfs ovl_create_of_link regression

A comedy of errors caused a regression.

Fixes a regression in commit 272fcd1ca7ceb252b1c3a2961110c7c1722707cf
("ANDROID: overlayfs: override_creds=off option bypass creator_cred")

in combination with

commit aab9adb4b8
("Merge 4.4.179 into android-4.4") that took in an incomplete
backport of commit 54a07fff4b
("ovl: fix uid/gid when creating over whiteout") (or upstream
commit d0e13f5bbe4be7c8f27736fc40503dcec04b7de0
("ovl: fix uid/gid when creating over whiteout"))

which did not recognize that ovl_override_creds can return a NULL
pointer.

Signed-off-by: Mark Salyzyn <salyzyn@google.com>
(cherry picked from https://lore.kernel.org/patchwork/patch/1009299)
Bug: 109821005
Bug: 112955896
Bug: 127298877
Bug: 137541192
Change-Id: Ia6b71a653d1bf728db610e384864bd82d335b923
This commit is contained in:
Mark Salyzyn 2019-07-15 10:42:42 -07:00
parent 14e11966c8
commit 17bd9a7f78

View file

@ -415,8 +415,13 @@ static int ovl_create_or_link(struct dentry *dentry, int mode, dev_t rdev,
err = -ENOMEM;
override_cred = prepare_creds();
if (override_cred) {
override_cred->fsuid = old_cred->fsuid;
override_cred->fsgid = old_cred->fsgid;
const struct cred *our_cred;
our_cred = old_cred;
if (!our_cred)
our_cred = current_cred();
override_cred->fsuid = our_cred->fsuid;
override_cred->fsgid = our_cred->fsgid;
put_cred(override_creds(override_cred));
put_cred(override_cred);