diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-15 19:39:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-15 19:39:15 -0400 |
commit | eea3a00264cf243a28e4331566ce67b86059339d (patch) | |
tree | 487f16389e0dfa32e9caa7604d1274a7dcda8f04 /lib/test-string_helpers.c | |
parent | e7c82412433a8039616c7314533a0a1c025d99bf (diff) | |
parent | e693d73c20ffdb06840c9378f367bad849ac0d5d (diff) |
Merge branch 'akpm' (patches from Andrew)
Merge second patchbomb from Andrew Morton:
- the rest of MM
- various misc bits
- add ability to run /sbin/reboot at reboot time
- printk/vsprintf changes
- fiddle with seq_printf() return value
* akpm: (114 commits)
parisc: remove use of seq_printf return value
lru_cache: remove use of seq_printf return value
tracing: remove use of seq_printf return value
cgroup: remove use of seq_printf return value
proc: remove use of seq_printf return value
s390: remove use of seq_printf return value
cris fasttimer: remove use of seq_printf return value
cris: remove use of seq_printf return value
openrisc: remove use of seq_printf return value
ARM: plat-pxa: remove use of seq_printf return value
nios2: cpuinfo: remove use of seq_printf return value
microblaze: mb: remove use of seq_printf return value
ipc: remove use of seq_printf return value
rtc: remove use of seq_printf return value
power: wakeup: remove use of seq_printf return value
x86: mtrr: if: remove use of seq_printf return value
linux/bitmap.h: improve BITMAP_{LAST,FIRST}_WORD_MASK
MAINTAINERS: CREDITS: remove Stefano Brivio from B43
.mailmap: add Ricardo Ribalda
CREDITS: add Ricardo Ribalda Delgado
...
Diffstat (limited to 'lib/test-string_helpers.c')
-rw-r--r-- | lib/test-string_helpers.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/lib/test-string_helpers.c b/lib/test-string_helpers.c index ab0d30e1e18f..8e376efd88a4 100644 --- a/lib/test-string_helpers.c +++ b/lib/test-string_helpers.c | |||
@@ -260,16 +260,28 @@ static __init const char *test_string_find_match(const struct test_string_2 *s2, | |||
260 | return NULL; | 260 | return NULL; |
261 | } | 261 | } |
262 | 262 | ||
263 | static __init void | ||
264 | test_string_escape_overflow(const char *in, int p, unsigned int flags, const char *esc, | ||
265 | int q_test, const char *name) | ||
266 | { | ||
267 | int q_real; | ||
268 | |||
269 | q_real = string_escape_mem(in, p, NULL, 0, flags, esc); | ||
270 | if (q_real != q_test) | ||
271 | pr_warn("Test '%s' failed: flags = %u, osz = 0, expected %d, got %d\n", | ||
272 | name, flags, q_test, q_real); | ||
273 | } | ||
274 | |||
263 | static __init void test_string_escape(const char *name, | 275 | static __init void test_string_escape(const char *name, |
264 | const struct test_string_2 *s2, | 276 | const struct test_string_2 *s2, |
265 | unsigned int flags, const char *esc) | 277 | unsigned int flags, const char *esc) |
266 | { | 278 | { |
267 | int q_real = 512; | 279 | size_t out_size = 512; |
268 | char *out_test = kmalloc(q_real, GFP_KERNEL); | 280 | char *out_test = kmalloc(out_size, GFP_KERNEL); |
269 | char *out_real = kmalloc(q_real, GFP_KERNEL); | 281 | char *out_real = kmalloc(out_size, GFP_KERNEL); |
270 | char *in = kmalloc(256, GFP_KERNEL); | 282 | char *in = kmalloc(256, GFP_KERNEL); |
271 | char *buf = out_real; | ||
272 | int p = 0, q_test = 0; | 283 | int p = 0, q_test = 0; |
284 | int q_real; | ||
273 | 285 | ||
274 | if (!out_test || !out_real || !in) | 286 | if (!out_test || !out_real || !in) |
275 | goto out; | 287 | goto out; |
@@ -301,29 +313,19 @@ static __init void test_string_escape(const char *name, | |||
301 | q_test += len; | 313 | q_test += len; |
302 | } | 314 | } |
303 | 315 | ||
304 | q_real = string_escape_mem(in, p, &buf, q_real, flags, esc); | 316 | q_real = string_escape_mem(in, p, out_real, out_size, flags, esc); |
305 | 317 | ||
306 | test_string_check_buf(name, flags, in, p, out_real, q_real, out_test, | 318 | test_string_check_buf(name, flags, in, p, out_real, q_real, out_test, |
307 | q_test); | 319 | q_test); |
320 | |||
321 | test_string_escape_overflow(in, p, flags, esc, q_test, name); | ||
322 | |||
308 | out: | 323 | out: |
309 | kfree(in); | 324 | kfree(in); |
310 | kfree(out_real); | 325 | kfree(out_real); |
311 | kfree(out_test); | 326 | kfree(out_test); |
312 | } | 327 | } |
313 | 328 | ||
314 | static __init void test_string_escape_nomem(void) | ||
315 | { | ||
316 | char *in = "\eb \\C\007\"\x90\r]"; | ||
317 | char out[64], *buf = out; | ||
318 | int rc = -ENOMEM, ret; | ||
319 | |||
320 | ret = string_escape_str_any_np(in, &buf, strlen(in), NULL); | ||
321 | if (ret == rc) | ||
322 | return; | ||
323 | |||
324 | pr_err("Test 'escape nomem' failed: got %d instead of %d\n", ret, rc); | ||
325 | } | ||
326 | |||
327 | static int __init test_string_helpers_init(void) | 329 | static int __init test_string_helpers_init(void) |
328 | { | 330 | { |
329 | unsigned int i; | 331 | unsigned int i; |
@@ -342,8 +344,6 @@ static int __init test_string_helpers_init(void) | |||
342 | for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++) | 344 | for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++) |
343 | test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1); | 345 | test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1); |
344 | 346 | ||
345 | test_string_escape_nomem(); | ||
346 | |||
347 | return -EINVAL; | 347 | return -EINVAL; |
348 | } | 348 | } |
349 | module_init(test_string_helpers_init); | 349 | module_init(test_string_helpers_init); |