* [lustre-devel] [bug report] staging: lustre: llite: remove duplicate fiemap defines
@ 2016-10-20 12:19 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2016-10-20 12:19 UTC (permalink / raw)
To: lustre-devel
Hello Bobi Jam,
The patch cbd4d4a8e319: "staging: lustre: llite: remove duplicate
fiemap defines" from Oct 2, 2016, leads to the following static
checker warning:
drivers/staging/lustre/lustre/lov/lov_object.c:1241 lov_object_fiemap()
warn: signed overflow undefined. 'fm_start + fm_length < fm_start'
drivers/staging/lustre/lustre/lov/lov_object.c
1102 static int lov_object_fiemap(const struct lu_env *env, struct cl_object *obj,
1103 struct ll_fiemap_info_key *fmkey,
1104 struct fiemap *fiemap, size_t *buflen)
1105 {
1106 struct lov_obd *lov = lu2lov_dev(obj->co_lu.lo_dev)->ld_lov;
1107 unsigned int buffer_size = FIEMAP_BUFFER_SIZE;
1108 struct fiemap_extent *lcl_fm_ext;
1109 struct cl_object *subobj = NULL;
1110 struct fiemap *fm_local = NULL;
1111 struct lov_stripe_md *lsm;
1112 loff_t fm_start;
^^^^^^^^
1113 loff_t fm_end;
1114 loff_t fm_length;
^^^^^^^^^^
These used to be u64 types but now they are signed.
1115 loff_t fm_end_offset;
1116 int count_local;
1117 int ost_index = 0;
1118 int start_stripe;
1119 int current_extent = 0;
1120 int rc = 0;
1121 int last_stripe;
1122 int cur_stripe = 0;
1123 int cur_stripe_wrap = 0;
1124 int stripe_count;
1125 /* Whether have we collected enough extents */
1126 bool enough = false;
1127 /* EOF for object */
1128 bool ost_eof = false;
1129 /* done with required mapping for this OST? */
1130 bool ost_done = false;
1131
[ snip ]
1231 /*
1232 * If this is a continuation FIEMAP call and we are on
1233 * starting stripe then lun_start needs to be set to
1234 * fm_end_offset
1235 */
1236 if (fm_end_offset && cur_stripe == start_stripe)
1237 lun_start = fm_end_offset;
1238
1239 if (fm_length != ~0ULL) {
1240 /* Handle fm_start + fm_length overflow */
1241 if (fm_start + fm_length < fm_start)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
So, technically, this is undefined behavior now.
1242 fm_length = ~0ULL - fm_start;
1243 lun_end = lov_size_to_stripe(lsm, fm_start + fm_length,
1244 cur_stripe);
1245 } else {
1246 lun_end = ~0ULL;
1247 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2016-10-20 12:19 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-20 12:19 [lustre-devel] [bug report] staging: lustre: llite: remove duplicate fiemap defines Dan Carpenter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.