|
@@ -820,6 +820,8 @@ static int load_flat_shared_library(int id, struct lib_info *libs)
|
|
int res;
|
|
int res;
|
|
char buf[16];
|
|
char buf[16];
|
|
|
|
|
|
|
|
+ memset(&bprm, 0, sizeof(bprm));
|
|
|
|
+
|
|
/* Create the file name */
|
|
/* Create the file name */
|
|
sprintf(buf, "/lib/lib%d.so", id);
|
|
sprintf(buf, "/lib/lib%d.so", id);
|
|
|
|
|
|
@@ -835,6 +837,12 @@ static int load_flat_shared_library(int id, struct lib_info *libs)
|
|
if (!bprm.cred)
|
|
if (!bprm.cred)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
|
|
+ /* We don't really care about recalculating credentials at this point
|
|
|
|
+ * as we're past the point of no return and are dealing with shared
|
|
|
|
+ * libraries.
|
|
|
|
+ */
|
|
|
|
+ bprm.cred_prepared = 1;
|
|
|
|
+
|
|
res = prepare_binprm(&bprm);
|
|
res = prepare_binprm(&bprm);
|
|
|
|
|
|
if (!IS_ERR_VALUE(res))
|
|
if (!IS_ERR_VALUE(res))
|