1#include <linux/slab.h> 2#include <linux/file.h> 3#include <linux/fdtable.h> 4#include <linux/mm.h> 5#include <linux/stat.h> 6#include <linux/fcntl.h> 7#include <linux/swap.h> 8#include <linux/string.h> 9#include <linux/init.h> 10#include <linux/pagemap.h> 11#include <linux/perf_event.h> 12#include <linux/highmem.h> 13#include <linux/spinlock.h> 14#include <linux/key.h> 15#include <linux/personality.h> 16#include <linux/binfmts.h> 17#include <linux/coredump.h> 18#include <linux/utsname.h> 19#include <linux/pid_namespace.h> 20#include <linux/module.h> 21#include <linux/namei.h> 22#include <linux/mount.h> 23#include <linux/security.h> 24#include <linux/syscalls.h> 25#include <linux/tsacct_kern.h> 26#include <linux/cn_proc.h> 27#include <linux/audit.h> 28#include <linux/tracehook.h> 29#include <linux/kmod.h> 30#include <linux/fsnotify.h> 31#include <linux/fs_struct.h> 32#include <linux/pipe_fs_i.h> 33#include <linux/oom.h> 34#include <linux/compat.h> 35#include <linux/sched.h> 36#include <linux/fs.h> 37#include <linux/path.h> 38#include <linux/timekeeping.h> 39 40#include <asm/uaccess.h> 41#include <asm/mmu_context.h> 42#include <asm/tlb.h> 43#include <asm/exec.h> 44 45#include <trace/events/task.h> 46#include "internal.h" 47 48#include <trace/events/sched.h> 49 50int core_uses_pid; 51unsigned int core_pipe_limit; 52char core_pattern[CORENAME_MAX_SIZE] = "core"; 53static int core_name_size = CORENAME_MAX_SIZE; 54 55struct core_name { 56 char *corename; 57 int used, size; 58}; 59 60/* The maximal length of core_pattern is also specified in sysctl.c */ 61 62static int expand_corename(struct core_name *cn, int size) 63{ 64 char *corename = krealloc(cn->corename, size, GFP_KERNEL); 65 66 if (!corename) 67 return -ENOMEM; 68 69 if (size > core_name_size) /* racy but harmless */ 70 core_name_size = size; 71 72 cn->size = ksize(corename); 73 cn->corename = corename; 74 return 0; 75} 76 77static int cn_vprintf(struct core_name *cn, const char *fmt, va_list arg) 78{ 79 int free, need; 80 va_list arg_copy; 81 82again: 83 free = cn->size - cn->used; 84 85 va_copy(arg_copy, arg); 86 need = vsnprintf(cn->corename + cn->used, free, fmt, arg_copy); 87 va_end(arg_copy); 88 89 if (need < free) { 90 cn->used += need; 91 return 0; 92 } 93 94 if (!expand_corename(cn, cn->size + need - free + 1)) 95 goto again; 96 97 return -ENOMEM; 98} 99 100static int cn_printf(struct core_name *cn, const char *fmt, ...) 101{ 102 va_list arg; 103 int ret; 104 105 va_start(arg, fmt); 106 ret = cn_vprintf(cn, fmt, arg); 107 va_end(arg); 108 109 return ret; 110} 111 112static int cn_esc_printf(struct core_name *cn, const char *fmt, ...) 113{ 114 int cur = cn->used; 115 va_list arg; 116 int ret; 117 118 va_start(arg, fmt); 119 ret = cn_vprintf(cn, fmt, arg); 120 va_end(arg); 121 122 for (; cur < cn->used; ++cur) { 123 if (cn->corename[cur] == '/') 124 cn->corename[cur] = '!'; 125 } 126 return ret; 127} 128 129static int cn_print_exe_file(struct core_name *cn) 130{ 131 struct file *exe_file; 132 char *pathbuf, *path; 133 int ret; 134 135 exe_file = get_mm_exe_file(current->mm); 136 if (!exe_file) 137 return cn_esc_printf(cn, "%s (path unknown)", current->comm); 138 139 pathbuf = kmalloc(PATH_MAX, GFP_TEMPORARY); 140 if (!pathbuf) { 141 ret = -ENOMEM; 142 goto put_exe_file; 143 } 144 145 path = d_path(&exe_file->f_path, pathbuf, PATH_MAX); 146 if (IS_ERR(path)) { 147 ret = PTR_ERR(path); 148 goto free_buf; 149 } 150 151 ret = cn_esc_printf(cn, "%s", path); 152 153free_buf: 154 kfree(pathbuf); 155put_exe_file: 156 fput(exe_file); 157 return ret; 158} 159 160/* format_corename will inspect the pattern parameter, and output a 161 * name into corename, which must have space for at least 162 * CORENAME_MAX_SIZE bytes plus one byte for the zero terminator. 163 */ 164static int format_corename(struct core_name *cn, struct coredump_params *cprm) 165{ 166 const struct cred *cred = current_cred(); 167 const char *pat_ptr = core_pattern; 168 int ispipe = (*pat_ptr == '|'); 169 int pid_in_pattern = 0; 170 int err = 0; 171 172 cn->used = 0; 173 cn->corename = NULL; 174 if (expand_corename(cn, core_name_size)) 175 return -ENOMEM; 176 cn->corename[0] = '\0'; 177 178 if (ispipe) 179 ++pat_ptr; 180 181 /* Repeat as long as we have more pattern to process and more output 182 space */ 183 while (*pat_ptr) { 184 if (*pat_ptr != '%') { 185 err = cn_printf(cn, "%c", *pat_ptr++); 186 } else { 187 switch (*++pat_ptr) { 188 /* single % at the end, drop that */ 189 case 0: 190 goto out; 191 /* Double percent, output one percent */ 192 case '%': 193 err = cn_printf(cn, "%c", '%'); 194 break; 195 /* pid */ 196 case 'p': 197 pid_in_pattern = 1; 198 err = cn_printf(cn, "%d", 199 task_tgid_vnr(current)); 200 break; 201 /* global pid */ 202 case 'P': 203 err = cn_printf(cn, "%d", 204 task_tgid_nr(current)); 205 break; 206 case 'i': 207 err = cn_printf(cn, "%d", 208 task_pid_vnr(current)); 209 break; 210 case 'I': 211 err = cn_printf(cn, "%d", 212 task_pid_nr(current)); 213 break; 214 /* uid */ 215 case 'u': 216 err = cn_printf(cn, "%d", cred->uid); 217 break; 218 /* gid */ 219 case 'g': 220 err = cn_printf(cn, "%d", cred->gid); 221 break; 222 case 'd': 223 err = cn_printf(cn, "%d", 224 __get_dumpable(cprm->mm_flags)); 225 break; 226 /* signal that caused the coredump */ 227 case 's': 228 err = cn_printf(cn, "%ld", cprm->siginfo->si_signo); 229 break; 230 /* UNIX time of coredump */ 231 case 't': { 232 time64_t time; 233 234 time = ktime_get_real_seconds(); 235 err = cn_printf(cn, "%lld", time); 236 break; 237 } 238 /* hostname */ 239 case 'h': 240 down_read(&uts_sem); 241 err = cn_esc_printf(cn, "%s", 242 utsname()->nodename); 243 up_read(&uts_sem); 244 break; 245 /* executable */ 246 case 'e': 247 err = cn_esc_printf(cn, "%s", current->comm); 248 break; 249 case 'E': 250 err = cn_print_exe_file(cn); 251 break; 252 /* core limit size */ 253 case 'c': 254 err = cn_printf(cn, "%lu", 255 rlimit(RLIMIT_CORE)); 256 break; 257 default: 258 break; 259 } 260 ++pat_ptr; 261 } 262 263 if (err) 264 return err; 265 } 266 267out: 268 /* Backward compatibility with core_uses_pid: 269 * 270 * If core_pattern does not include a %p (as is the default) 271 * and core_uses_pid is set, then .%pid will be appended to 272 * the filename. Do not do this for piped commands. */ 273 if (!ispipe && !pid_in_pattern && core_uses_pid) { 274 err = cn_printf(cn, ".%d", task_tgid_vnr(current)); 275 if (err) 276 return err; 277 } 278 return ispipe; 279} 280 281static int zap_process(struct task_struct *start, int exit_code) 282{ 283 struct task_struct *t; 284 int nr = 0; 285 286 start->signal->group_exit_code = exit_code; 287 start->signal->group_stop_count = 0; 288 289 t = start; 290 do { 291 task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK); 292 if (t != current && t->mm) { 293 sigaddset(&t->pending.signal, SIGKILL); 294 signal_wake_up(t, 1); 295 nr++; 296 } 297 } while_each_thread(start, t); 298 299 return nr; 300} 301 302static int zap_threads(struct task_struct *tsk, struct mm_struct *mm, 303 struct core_state *core_state, int exit_code) 304{ 305 struct task_struct *g, *p; 306 unsigned long flags; 307 int nr = -EAGAIN; 308 309 spin_lock_irq(&tsk->sighand->siglock); 310 if (!signal_group_exit(tsk->signal)) { 311 mm->core_state = core_state; 312 nr = zap_process(tsk, exit_code); 313 tsk->signal->group_exit_task = tsk; 314 /* ignore all signals except SIGKILL, see prepare_signal() */ 315 tsk->signal->flags = SIGNAL_GROUP_COREDUMP; 316 clear_tsk_thread_flag(tsk, TIF_SIGPENDING); 317 } 318 spin_unlock_irq(&tsk->sighand->siglock); 319 if (unlikely(nr < 0)) 320 return nr; 321 322 tsk->flags |= PF_DUMPCORE; 323 if (atomic_read(&mm->mm_users) == nr + 1) 324 goto done; 325 /* 326 * We should find and kill all tasks which use this mm, and we should 327 * count them correctly into ->nr_threads. We don't take tasklist 328 * lock, but this is safe wrt: 329 * 330 * fork: 331 * None of sub-threads can fork after zap_process(leader). All 332 * processes which were created before this point should be 333 * visible to zap_threads() because copy_process() adds the new 334 * process to the tail of init_task.tasks list, and lock/unlock 335 * of ->siglock provides a memory barrier. 336 * 337 * do_exit: 338 * The caller holds mm->mmap_sem. This means that the task which 339 * uses this mm can't pass exit_mm(), so it can't exit or clear 340 * its ->mm. 341 * 342 * de_thread: 343 * It does list_replace_rcu(&leader->tasks, ¤t->tasks), 344 * we must see either old or new leader, this does not matter. 345 * However, it can change p->sighand, so lock_task_sighand(p) 346 * must be used. Since p->mm != NULL and we hold ->mmap_sem 347 * it can't fail. 348 * 349 * Note also that "g" can be the old leader with ->mm == NULL 350 * and already unhashed and thus removed from ->thread_group. 351 * This is OK, __unhash_process()->list_del_rcu() does not 352 * clear the ->next pointer, we will find the new leader via 353 * next_thread(). 354 */ 355 rcu_read_lock(); 356 for_each_process(g) { 357 if (g == tsk->group_leader) 358 continue; 359 if (g->flags & PF_KTHREAD) 360 continue; 361 p = g; 362 do { 363 if (p->mm) { 364 if (unlikely(p->mm == mm)) { 365 lock_task_sighand(p, &flags); 366 nr += zap_process(p, exit_code); 367 p->signal->flags = SIGNAL_GROUP_EXIT; 368 unlock_task_sighand(p, &flags); 369 } 370 break; 371 } 372 } while_each_thread(g, p); 373 } 374 rcu_read_unlock(); 375done: 376 atomic_set(&core_state->nr_threads, nr); 377 return nr; 378} 379 380static int coredump_wait(int exit_code, struct core_state *core_state) 381{ 382 struct task_struct *tsk = current; 383 struct mm_struct *mm = tsk->mm; 384 int core_waiters = -EBUSY; 385 386 init_completion(&core_state->startup); 387 core_state->dumper.task = tsk; 388 core_state->dumper.next = NULL; 389 390 down_write(&mm->mmap_sem); 391 if (!mm->core_state) 392 core_waiters = zap_threads(tsk, mm, core_state, exit_code); 393 up_write(&mm->mmap_sem); 394 395 if (core_waiters > 0) { 396 struct core_thread *ptr; 397 398 wait_for_completion(&core_state->startup); 399 /* 400 * Wait for all the threads to become inactive, so that 401 * all the thread context (extended register state, like 402 * fpu etc) gets copied to the memory. 403 */ 404 ptr = core_state->dumper.next; 405 while (ptr != NULL) { 406 wait_task_inactive(ptr->task, 0); 407 ptr = ptr->next; 408 } 409 } 410 411 return core_waiters; 412} 413 414static void coredump_finish(struct mm_struct *mm, bool core_dumped) 415{ 416 struct core_thread *curr, *next; 417 struct task_struct *task; 418 419 spin_lock_irq(¤t->sighand->siglock); 420 if (core_dumped && !__fatal_signal_pending(current)) 421 current->signal->group_exit_code |= 0x80; 422 current->signal->group_exit_task = NULL; 423 current->signal->flags = SIGNAL_GROUP_EXIT; 424 spin_unlock_irq(¤t->sighand->siglock); 425 426 next = mm->core_state->dumper.next; 427 while ((curr = next) != NULL) { 428 next = curr->next; 429 task = curr->task; 430 /* 431 * see exit_mm(), curr->task must not see 432 * ->task == NULL before we read ->next. 433 */ 434 smp_mb(); 435 curr->task = NULL; 436 wake_up_process(task); 437 } 438 439 mm->core_state = NULL; 440} 441 442static bool dump_interrupted(void) 443{ 444 /* 445 * SIGKILL or freezing() interrupt the coredumping. Perhaps we 446 * can do try_to_freeze() and check __fatal_signal_pending(), 447 * but then we need to teach dump_write() to restart and clear 448 * TIF_SIGPENDING. 449 */ 450 return signal_pending(current); 451} 452 453static void wait_for_dump_helpers(struct file *file) 454{ 455 struct pipe_inode_info *pipe = file->private_data; 456 457 pipe_lock(pipe); 458 pipe->readers++; 459 pipe->writers--; 460 wake_up_interruptible_sync(&pipe->wait); 461 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); 462 pipe_unlock(pipe); 463 464 /* 465 * We actually want wait_event_freezable() but then we need 466 * to clear TIF_SIGPENDING and improve dump_interrupted(). 467 */ 468 wait_event_interruptible(pipe->wait, pipe->readers == 1); 469 470 pipe_lock(pipe); 471 pipe->readers--; 472 pipe->writers++; 473 pipe_unlock(pipe); 474} 475 476/* 477 * umh_pipe_setup 478 * helper function to customize the process used 479 * to collect the core in userspace. Specifically 480 * it sets up a pipe and installs it as fd 0 (stdin) 481 * for the process. Returns 0 on success, or 482 * PTR_ERR on failure. 483 * Note that it also sets the core limit to 1. This 484 * is a special value that we use to trap recursive 485 * core dumps 486 */ 487static int umh_pipe_setup(struct subprocess_info *info, struct cred *new) 488{ 489 struct file *files[2]; 490 struct coredump_params *cp = (struct coredump_params *)info->data; 491 int err = create_pipe_files(files, 0); 492 if (err) 493 return err; 494 495 cp->file = files[1]; 496 497 err = replace_fd(0, files[0], 0); 498 fput(files[0]); 499 /* and disallow core files too */ 500 current->signal->rlim[RLIMIT_CORE] = (struct rlimit){1, 1}; 501 502 return err; 503} 504 505void do_coredump(const siginfo_t *siginfo) 506{ 507 struct core_state core_state; 508 struct core_name cn; 509 struct mm_struct *mm = current->mm; 510 struct linux_binfmt * binfmt; 511 const struct cred *old_cred; 512 struct cred *cred; 513 int retval = 0; 514 int ispipe; 515 struct files_struct *displaced; 516 /* require nonrelative corefile path and be extra careful */ 517 bool need_suid_safe = false; 518 bool core_dumped = false; 519 static atomic_t core_dump_count = ATOMIC_INIT(0); 520 struct coredump_params cprm = { 521 .siginfo = siginfo, 522 .regs = signal_pt_regs(), 523 .limit = rlimit(RLIMIT_CORE), 524 /* 525 * We must use the same mm->flags while dumping core to avoid 526 * inconsistency of bit flags, since this flag is not protected 527 * by any locks. 528 */ 529 .mm_flags = mm->flags, 530 }; 531 532 audit_core_dumps(siginfo->si_signo); 533 534 binfmt = mm->binfmt; 535 if (!binfmt || !binfmt->core_dump) 536 goto fail; 537 if (!__get_dumpable(cprm.mm_flags)) 538 goto fail; 539 540 cred = prepare_creds(); 541 if (!cred) 542 goto fail; 543 /* 544 * We cannot trust fsuid as being the "true" uid of the process 545 * nor do we know its entire history. We only know it was tainted 546 * so we dump it as root in mode 2, and only into a controlled 547 * environment (pipe handler or fully qualified path). 548 */ 549 if (__get_dumpable(cprm.mm_flags) == SUID_DUMP_ROOT) { 550 /* Setuid core dump mode */ 551 cred->fsuid = GLOBAL_ROOT_UID; /* Dump root private */ 552 need_suid_safe = true; 553 } 554 555 retval = coredump_wait(siginfo->si_signo, &core_state); 556 if (retval < 0) 557 goto fail_creds; 558 559 old_cred = override_creds(cred); 560 561 ispipe = format_corename(&cn, &cprm); 562 563 if (ispipe) { 564 int dump_count; 565 char **helper_argv; 566 struct subprocess_info *sub_info; 567 568 if (ispipe < 0) { 569 printk(KERN_WARNING "format_corename failed\n"); 570 printk(KERN_WARNING "Aborting core\n"); 571 goto fail_unlock; 572 } 573 574 if (cprm.limit == 1) { 575 /* See umh_pipe_setup() which sets RLIMIT_CORE = 1. 576 * 577 * Normally core limits are irrelevant to pipes, since 578 * we're not writing to the file system, but we use 579 * cprm.limit of 1 here as a special value, this is a 580 * consistent way to catch recursive crashes. 581 * We can still crash if the core_pattern binary sets 582 * RLIM_CORE = !1, but it runs as root, and can do 583 * lots of stupid things. 584 * 585 * Note that we use task_tgid_vnr here to grab the pid 586 * of the process group leader. That way we get the 587 * right pid if a thread in a multi-threaded 588 * core_pattern process dies. 589 */ 590 printk(KERN_WARNING 591 "Process %d(%s) has RLIMIT_CORE set to 1\n", 592 task_tgid_vnr(current), current->comm); 593 printk(KERN_WARNING "Aborting core\n"); 594 goto fail_unlock; 595 } 596 cprm.limit = RLIM_INFINITY; 597 598 dump_count = atomic_inc_return(&core_dump_count); 599 if (core_pipe_limit && (core_pipe_limit < dump_count)) { 600 printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n", 601 task_tgid_vnr(current), current->comm); 602 printk(KERN_WARNING "Skipping core dump\n"); 603 goto fail_dropcount; 604 } 605 606 helper_argv = argv_split(GFP_KERNEL, cn.corename, NULL); 607 if (!helper_argv) { 608 printk(KERN_WARNING "%s failed to allocate memory\n", 609 __func__); 610 goto fail_dropcount; 611 } 612 613 retval = -ENOMEM; 614 sub_info = call_usermodehelper_setup(helper_argv[0], 615 helper_argv, NULL, GFP_KERNEL, 616 umh_pipe_setup, NULL, &cprm); 617 if (sub_info) 618 retval = call_usermodehelper_exec(sub_info, 619 UMH_WAIT_EXEC); 620 621 argv_free(helper_argv); 622 if (retval) { 623 printk(KERN_INFO "Core dump to |%s pipe failed\n", 624 cn.corename); 625 goto close_fail; 626 } 627 } else { 628 struct inode *inode; 629 int open_flags = O_CREAT | O_RDWR | O_NOFOLLOW | 630 O_LARGEFILE | O_EXCL; 631 632 if (cprm.limit < binfmt->min_coredump) 633 goto fail_unlock; 634 635 if (need_suid_safe && cn.corename[0] != '/') { 636 printk(KERN_WARNING "Pid %d(%s) can only dump core "\ 637 "to fully qualified path!\n", 638 task_tgid_vnr(current), current->comm); 639 printk(KERN_WARNING "Skipping core dump\n"); 640 goto fail_unlock; 641 } 642 643 /* 644 * Unlink the file if it exists unless this is a SUID 645 * binary - in that case, we're running around with root 646 * privs and don't want to unlink another user's coredump. 647 */ 648 if (!need_suid_safe) { 649 mm_segment_t old_fs; 650 651 old_fs = get_fs(); 652 set_fs(KERNEL_DS); 653 /* 654 * If it doesn't exist, that's fine. If there's some 655 * other problem, we'll catch it at the filp_open(). 656 */ 657 (void) sys_unlink((const char __user *)cn.corename); 658 set_fs(old_fs); 659 } 660 661 /* 662 * There is a race between unlinking and creating the 663 * file, but if that causes an EEXIST here, that's 664 * fine - another process raced with us while creating 665 * the corefile, and the other process won. To userspace, 666 * what matters is that at least one of the two processes 667 * writes its coredump successfully, not which one. 668 */ 669 if (need_suid_safe) { 670 /* 671 * Using user namespaces, normal user tasks can change 672 * their current->fs->root to point to arbitrary 673 * directories. Since the intention of the "only dump 674 * with a fully qualified path" rule is to control where 675 * coredumps may be placed using root privileges, 676 * current->fs->root must not be used. Instead, use the 677 * root directory of init_task. 678 */ 679 struct path root; 680 681 task_lock(&init_task); 682 get_fs_root(init_task.fs, &root); 683 task_unlock(&init_task); 684 cprm.file = file_open_root(root.dentry, root.mnt, 685 cn.corename, open_flags, 0600); 686 path_put(&root); 687 } else { 688 cprm.file = filp_open(cn.corename, open_flags, 0600); 689 } 690 if (IS_ERR(cprm.file)) 691 goto fail_unlock; 692 693 inode = file_inode(cprm.file); 694 if (inode->i_nlink > 1) 695 goto close_fail; 696 if (d_unhashed(cprm.file->f_path.dentry)) 697 goto close_fail; 698 /* 699 * AK: actually i see no reason to not allow this for named 700 * pipes etc, but keep the previous behaviour for now. 701 */ 702 if (!S_ISREG(inode->i_mode)) 703 goto close_fail; 704 /* 705 * Don't dump core if the filesystem changed owner or mode 706 * of the file during file creation. This is an issue when 707 * a process dumps core while its cwd is e.g. on a vfat 708 * filesystem. 709 */ 710 if (!uid_eq(inode->i_uid, current_fsuid())) 711 goto close_fail; 712 if ((inode->i_mode & 0677) != 0600) 713 goto close_fail; 714 if (!(cprm.file->f_mode & FMODE_CAN_WRITE)) 715 goto close_fail; 716 if (do_truncate(cprm.file->f_path.dentry, 0, 0, cprm.file)) 717 goto close_fail; 718 } 719 720 /* get us an unshared descriptor table; almost always a no-op */ 721 retval = unshare_files(&displaced); 722 if (retval) 723 goto close_fail; 724 if (displaced) 725 put_files_struct(displaced); 726 if (!dump_interrupted()) { 727 file_start_write(cprm.file); 728 core_dumped = binfmt->core_dump(&cprm); 729 file_end_write(cprm.file); 730 } 731 if (ispipe && core_pipe_limit) 732 wait_for_dump_helpers(cprm.file); 733close_fail: 734 if (cprm.file) 735 filp_close(cprm.file, NULL); 736fail_dropcount: 737 if (ispipe) 738 atomic_dec(&core_dump_count); 739fail_unlock: 740 kfree(cn.corename); 741 coredump_finish(mm, core_dumped); 742 revert_creds(old_cred); 743fail_creds: 744 put_cred(cred); 745fail: 746 return; 747} 748 749/* 750 * Core dumping helper functions. These are the only things you should 751 * do on a core-file: use only these functions to write out all the 752 * necessary info. 753 */ 754int dump_emit(struct coredump_params *cprm, const void *addr, int nr) 755{ 756 struct file *file = cprm->file; 757 loff_t pos = file->f_pos; 758 ssize_t n; 759 if (cprm->written + nr > cprm->limit) 760 return 0; 761 while (nr) { 762 if (dump_interrupted()) 763 return 0; 764 n = __kernel_write(file, addr, nr, &pos); 765 if (n <= 0) 766 return 0; 767 file->f_pos = pos; 768 cprm->written += n; 769 nr -= n; 770 } 771 return 1; 772} 773EXPORT_SYMBOL(dump_emit); 774 775int dump_skip(struct coredump_params *cprm, size_t nr) 776{ 777 static char zeroes[PAGE_SIZE]; 778 struct file *file = cprm->file; 779 if (file->f_op->llseek && file->f_op->llseek != no_llseek) { 780 if (cprm->written + nr > cprm->limit) 781 return 0; 782 if (dump_interrupted() || 783 file->f_op->llseek(file, nr, SEEK_CUR) < 0) 784 return 0; 785 cprm->written += nr; 786 return 1; 787 } else { 788 while (nr > PAGE_SIZE) { 789 if (!dump_emit(cprm, zeroes, PAGE_SIZE)) 790 return 0; 791 nr -= PAGE_SIZE; 792 } 793 return dump_emit(cprm, zeroes, nr); 794 } 795} 796EXPORT_SYMBOL(dump_skip); 797 798int dump_align(struct coredump_params *cprm, int align) 799{ 800 unsigned mod = cprm->written & (align - 1); 801 if (align & (align - 1)) 802 return 0; 803 return mod ? dump_skip(cprm, align - mod) : 1; 804} 805EXPORT_SYMBOL(dump_align); 806