diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-05-24 12:17:46 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-05-24 12:17:46 +0800 |
commit | b5db8c3eefa4d7b7ca7934610356969fa1a4547b (patch) | |
tree | fb2cc37b4da4b4611eb9920789a130a6c41af1e7 /fs/isofs/rock.c | |
parent | 14c737514d0953f05e91103c05e975b3b5c1e469 (diff) | |
parent | 6c1be3bf831c5b1f2ba51425315287df2c350633 (diff) |
Merge branch 'linux-linaro-lsk-v3.18' into linux-linaro-lsk-v3.18-androidlsk-v3.18-16.05-android
Diffstat (limited to 'fs/isofs/rock.c')
-rw-r--r-- | fs/isofs/rock.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c index 735d7522a3a9..204659a5f6db 100644 --- a/fs/isofs/rock.c +++ b/fs/isofs/rock.c @@ -203,6 +203,8 @@ int get_rock_ridge_filename(struct iso_directory_record *de, int retnamlen = 0; int truncate = 0; int ret = 0; + char *p; + int len; if (!ISOFS_SB(inode->i_sb)->s_rock) return 0; @@ -267,12 +269,17 @@ repeat: rr->u.NM.flags); break; } - if ((strlen(retname) + rr->len - 5) >= 254) { + len = rr->len - 5; + if (retnamlen + len >= 254) { truncate = 1; break; } - strncat(retname, rr->u.NM.name, rr->len - 5); - retnamlen += rr->len - 5; + p = memchr(rr->u.NM.name, '\0', len); + if (unlikely(p)) + len = p - rr->u.NM.name; + memcpy(retname + retnamlen, rr->u.NM.name, len); + retnamlen += len; + retname[retnamlen] = '\0'; break; case SIG('R', 'E'): kfree(rs.buffer); |