Details
-
Bug
-
Resolution: Fixed
-
Minor
-
Lustre 2.6.0
-
3
-
12229
Description
In some mdt_reconstruct functions we are dereferencing ERR_PTRs. In each case it's mdt_object_fid(child) after IS_ERR(child) has returned true.
HANDLING: lustre/mdt/mdt_open.c diff = diff -u -p a/mdt/mdt_open.c b/mdt/mdt_open.c --- a/mdt/mdt_open.c +++ b/mdt/mdt_open.c @@ -1091,7 +1091,7 @@ void mdt_reconstruct_open(struct mdt_thr rc = PTR_ERR(child); LCONSOLE_WARN("Child "DFID" lookup error %d." " Evicting client %s with export %s.\n", - PFID(mdt_object_fid(child)), rc, + PFID(), rc, obd_uuid2str(&exp->exp_client_uuid), obd_export_nid2str(exp)); mdt_object_put(env, parent); diff -u -p a/mdt/mdt_recovery.c b/mdt/mdt_recovery.c --- a/mdt/mdt_recovery.c +++ b/mdt/mdt_recovery.c @@ -255,7 +255,7 @@ static void mdt_reconstruct_create(struc rc = PTR_ERR(child); LCONSOLE_WARN("Child "DFID" lookup error %d." " Evicting client %s with export %s.\n", - PFID(mdt_object_fid(child)), rc, + PFID(), rc, obd_uuid2str(&exp->exp_client_uuid), obd_export_nid2str(exp)); mdt_export_evict(exp); @@ -301,7 +301,7 @@ static void mdt_reconstruct_setattr(stru int rc = PTR_ERR(obj); LCONSOLE_WARN(""DFID" lookup error %d." " Evicting client %s with export %s.\n", - PFID(mdt_object_fid(obj)), rc, + PFID(), rc, obd_uuid2str(&exp->exp_client_uuid), obd_export_nid2str(exp)); mdt_export_evict(exp);
This was found using the coccinelle script:
// this detects cases where a value compared to NULL is subsequently passed // to PTR_ERR // // Confidence: High // Copyright: (C) Gilles Muller, Julia Lawall, EMN, INRIA, DIKU. GPLv2. // URL: http://coccinelle.lip6.fr/rules/ptr.html // Options: @@ identifier F !~ "^\(RETURN\|GOTO\|PTR_ERR\|ERR_CAST\)$"; expression E,E1; @@ if (IS_ERR(E)) { <+... when != E = E1 - F(...,E,...) ...+> }