Whamcloud - gitweb
LU-6938 osd: fix error handling in osd_xattr_list() 28/15828/2
authorAlex Zhuravlev <alexey.zhuravlev@intel.com>
Sat, 1 Aug 2015 09:28:23 +0000 (12:28 +0300)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 3 Aug 2015 02:34:33 +0000 (02:34 +0000)
in case of buffer overflow, osd_xattr_list() should leave
properly: release the semaphore and the cursor.

Change-Id: I750183cb083cb87b3d8adae8fb0f41b61e6689e5
Signed-off-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-on: http://review.whamcloud.com/15828
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Niu Yawei <yawei.niu@intel.com>
Reviewed-by: Liang Zhen <liang.zhen@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/osd-zfs/osd_xattr.c

index 777fdb0..2b8636b 100644 (file)
@@ -919,7 +919,7 @@ int osd_xattr_list(const struct lu_env *env, struct dt_object *dt,
                rc = strlen(za->za_name);
                if (lb->lb_buf != NULL) {
                        if (counted + rc + 1 > lb->lb_len)
                rc = strlen(za->za_name);
                if (lb->lb_buf != NULL) {
                        if (counted + rc + 1 > lb->lb_len)
-                               RETURN(-ERANGE);
+                               GOTO(out_fini, rc = -ERANGE);
 
                        memcpy(lb->lb_buf + counted, za->za_name, rc + 1);
                }
 
                        memcpy(lb->lb_buf + counted, za->za_name, rc + 1);
                }