Whamcloud - gitweb
LU-1384 mdd: validate incoming param to avoid crashing
authorBobi Jam <bobijam@whamcloud.com>
Thu, 24 May 2012 03:30:18 +0000 (11:30 +0800)
committerOleg Drokin <green@whamcloud.com>
Wed, 30 May 2012 13:22:05 +0000 (09:22 -0400)
MDS get crashed when it is connected by old 1.8.x client, the crash
point is

kernel:LustreError: 3657:0:(mdd_object.c:635:mdd_big_lmm_get())
ASSERTION( ma->ma_lmm_size > 0 ) failed

We need validate the incoming @ma lest old client crashes the MDS.

Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Change-Id: Iebdce6396318a2c6ee413a03dc76c122e3f84146
Reviewed-on: http://review.whamcloud.com/2905
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/mdd/mdd_object.c

index 27c6874..ccea39b 100644 (file)
@@ -621,14 +621,19 @@ static int is_rootdir(struct mdd_object *mdd_obj)
 int mdd_big_lmm_get(const struct lu_env *env, struct mdd_object *obj,
                     struct md_attr *ma)
 {
-        struct mdd_thread_info *info = mdd_env_info(env);
-        int size;
-        int rc;
-        ENTRY;
-
-        LASSERT(info != NULL);
-        LASSERT(ma->ma_lmm_size > 0);
-        LASSERT(ma->ma_big_lmm_used == 0);
+       struct mdd_thread_info *info = mdd_env_info(env);
+       int                     size;
+       int                     rc   = -EINVAL;
+       ENTRY;
+
+       LASSERT(info != NULL);
+       LASSERT(ma->ma_big_lmm_used == 0);
+
+       if (ma->ma_lmm_size == 0) {
+               CERROR("No buffer to hold %s xattr of object "DFID"\n",
+                      XATTR_NAME_LOV, PFID(mdd_object_fid(obj)));
+               RETURN(rc);
+       }
 
         rc = mdo_xattr_get(env, obj, &LU_BUF_NULL, XATTR_NAME_LOV,
                            mdd_object_capa(env, obj));