Whamcloud - gitweb
LU-4689 hsm: count NULL terminator in hai_first/hal_size 31/9431/2
authorPeng Tao <bergwolf@gmail.com>
Thu, 27 Feb 2014 08:07:39 +0000 (16:07 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 3 Mar 2014 03:25:18 +0000 (03:25 +0000)
If fsname is 8-byte aligned, hai_first fails to count the ending NULL
terminator causing hai to directly attached after fsname and future
hai_first will return a different position for first hai.

Signed-off-by: Peng Tao <bergwolf@gmail.com>
Change-Id: I5e9e1f48f99b4743b2d5b93397e06f6becabeb26
Reviewed-on: http://review.whamcloud.com/9431
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/include/lustre/lustre_user.h

index f0d9c62..4793426 100644 (file)
@@ -1139,9 +1139,10 @@ static inline int cfs_size_round (int val)
 /* Return pointer to first hai in action list */
 static inline struct hsm_action_item *hai_first(struct hsm_action_list *hal)
 {
-        return (struct hsm_action_item *)(hal->hal_fsname +
-                                          cfs_size_round(strlen(hal-> \
-                                                                hal_fsname)));
+       return (struct hsm_action_item *)(hal->hal_fsname +
+                                         cfs_size_round(strlen(hal-> \
+                                                               hal_fsname)
+                                                        + 1));
 }
 /* Return pointer to next hai */
 static inline struct hsm_action_item * hai_next(struct hsm_action_item *hai)
@@ -1157,7 +1158,7 @@ static inline size_t hal_size(struct hsm_action_list *hal)
        size_t sz;
        struct hsm_action_item *hai;
 
-       sz = sizeof(*hal) + cfs_size_round(strlen(hal->hal_fsname));
+       sz = sizeof(*hal) + cfs_size_round(strlen(hal->hal_fsname) + 1);
        hai = hai_first(hal);
        for (i = 0; i < hal->hal_count ; i++, hai = hai_next(hai))
                sz += cfs_size_round(hai->hai_len);