summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
5ccd7a4)
The PATH env variable can be very large, it may exceed the page
size sometimes. cfs_get_envrion() should skip such too long env
variables instead of returning error.
Signed-off-by: Niu Yawei <yawei.niu@intel.com>
Change-Id: I43c103a647cde3afa499dec3a11312155c3cf924
Reviewed-on: http://review.whamcloud.com/15177
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
int key_len = strlen(key);
unsigned long addr;
int rc;
int key_len = strlen(key);
unsigned long addr;
int rc;
ENTRY;
buffer = kmalloc(buf_len, GFP_USER);
ENTRY;
buffer = kmalloc(buf_len, GFP_USER);
/* The last entry of this buffer cross the buffer
* boundary, reread it in next cycle. */
if (unlikely(env_end - env_start == scan_len)) {
/* The last entry of this buffer cross the buffer
* boundary, reread it in next cycle. */
if (unlikely(env_end - env_start == scan_len)) {
- /* This entry is too large to fit in buffer */
- if (unlikely(scan_len == this_len)) {
- CERROR("Too long env variable.\n");
- GOTO(out, rc = -EINVAL);
- }
- addr -= scan_len;
+ /* Just skip the entry larger than page size,
+ * it can't be jobID env variable. */
+ if (unlikely(scan_len == this_len))
+ skip = true;
+ else
+ addr -= scan_len;
+ } else if (unlikely(skip)) {
+ skip = false;
+ goto skip;
*val_len = entry_len;
GOTO(out, rc = 0);
}
*val_len = entry_len;
GOTO(out, rc = 0);
}
scan_len -= (env_end - env_start + 1);
env_start = env_end + 1;
}
scan_len -= (env_end - env_start + 1);
env_start = env_end + 1;
}