mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-28 02:32:47 +00:00
MFC r313494:
Handle protected symbols in rtld.
This commit is contained in:
parent
ac690a4d03
commit
b8093578a6
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=314199
@ -3833,15 +3833,19 @@ symlook_default(SymLook *req, const Obj_Entry *refobj)
|
||||
donelist_init(&donelist);
|
||||
symlook_init_from_req(&req1, req);
|
||||
|
||||
/* Look first in the referencing object if linked symbolically. */
|
||||
if (refobj->symbolic && !donelist_check(&donelist, refobj)) {
|
||||
res = symlook_obj(&req1, refobj);
|
||||
if (res == 0) {
|
||||
req->sym_out = req1.sym_out;
|
||||
req->defobj_out = req1.defobj_out;
|
||||
assert(req->defobj_out != NULL);
|
||||
}
|
||||
/*
|
||||
* Look first in the referencing object if linked symbolically,
|
||||
* and similarly handle protected symbols.
|
||||
*/
|
||||
res = symlook_obj(&req1, refobj);
|
||||
if (res == 0 && (refobj->symbolic ||
|
||||
ELF_ST_VISIBILITY(req1.sym_out->st_other) == STV_PROTECTED)) {
|
||||
req->sym_out = req1.sym_out;
|
||||
req->defobj_out = req1.defobj_out;
|
||||
assert(req->defobj_out != NULL);
|
||||
}
|
||||
if (refobj->symbolic || req->defobj_out != NULL)
|
||||
donelist_check(&donelist, refobj);
|
||||
|
||||
symlook_global(req, &donelist);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user