Historically due to the 16-byte length of TASK_COMM_LEN, the users of 'tsk->comm' are restricted to use a fixed-size target buffer also of TASK_COMM_LEN for 'memcpy()' like use-cases.
To fix the same, Kees suggested in [1] that we can replace tsk->comm, with tsk->comm_str, inside 'task_struct': union { char comm_str[TASK_COMM_EXT_LEN]; }; where TASK_COMM_EXT_LEN is 64-bytes. And then modify 'get_task_comm()' to pass 'tsk->comm_str' to the existing users. This would mean that ABI is maintained while ensuring that: - Existing users of 'get_task_comm'/ 'set_task_comm' will get 'tsk->comm_str' truncated to a maximum of 'TASK_COMM_LEN' (16-bytes) to maintain ABI, - New / Modified users of 'get_task_comm'/ 'set_task_comm' will get 'tsk->comm_str' supported for a maximum of 'TASK_COMM_EXTLEN' (64-bytes). Note, that the existing users have not been modified to migrate to 'TASK_COMM_EXT_LEN', in case they have hard-coded expectations of dealing with only a 'TASK_COMM_LEN' long 'tsk->comm_str'. [1]. https://lore.kernel.org/all/202505231346.52F291C54@keescook/ Signed-off-by: Bhupesh <bhup...@igalia.com> --- arch/arm64/kernel/traps.c | 2 +- arch/arm64/kvm/mmu.c | 2 +- block/blk-core.c | 2 +- block/bsg.c | 2 +- drivers/char/random.c | 2 +- drivers/hid/hid-core.c | 6 +++--- drivers/mmc/host/tmio_mmc_core.c | 6 +++--- drivers/pci/pci-sysfs.c | 2 +- drivers/scsi/scsi_ioctl.c | 2 +- drivers/tty/serial/serial_core.c | 2 +- drivers/tty/tty_io.c | 8 ++++---- drivers/usb/core/devio.c | 16 ++++++++-------- drivers/usb/core/message.c | 2 +- drivers/vfio/group.c | 2 +- drivers/vfio/vfio_iommu_type1.c | 2 +- drivers/vfio/vfio_main.c | 2 +- drivers/xen/evtchn.c | 2 +- drivers/xen/grant-table.c | 2 +- fs/binfmt_elf.c | 2 +- fs/coredump.c | 4 ++-- fs/drop_caches.c | 2 +- fs/exec.c | 8 ++++---- fs/ext4/dir.c | 2 +- fs/ext4/inode.c | 2 +- fs/ext4/namei.c | 2 +- fs/ext4/super.c | 12 ++++++------ fs/hugetlbfs/inode.c | 2 +- fs/ioctl.c | 2 +- fs/iomap/direct-io.c | 2 +- fs/jbd2/transaction.c | 2 +- fs/locks.c | 2 +- fs/netfs/internal.h | 2 +- fs/proc/base.c | 2 +- fs/read_write.c | 2 +- fs/splice.c | 2 +- include/linux/coredump.h | 2 +- include/linux/filter.h | 2 +- include/linux/ratelimit.h | 2 +- include/linux/sched.h | 11 ++++++++--- init/init_task.c | 2 +- ipc/sem.c | 2 +- kernel/acct.c | 2 +- kernel/audit.c | 4 ++-- kernel/auditsc.c | 10 +++++----- kernel/bpf/helpers.c | 2 +- kernel/capability.c | 4 ++-- kernel/cgroup/cgroup-v1.c | 2 +- kernel/cred.c | 4 ++-- kernel/events/core.c | 2 +- kernel/exit.c | 6 +++--- kernel/fork.c | 9 +++++++-- kernel/freezer.c | 4 ++-- kernel/futex/waitwake.c | 2 +- kernel/hung_task.c | 10 +++++----- kernel/irq/manage.c | 2 +- kernel/kthread.c | 2 +- kernel/locking/rtmutex.c | 2 +- kernel/printk/printk.c | 2 +- kernel/sched/core.c | 22 +++++++++++----------- kernel/sched/debug.c | 4 ++-- kernel/signal.c | 6 +++--- kernel/sys.c | 6 +++--- kernel/sysctl.c | 2 +- kernel/time/itimer.c | 4 ++-- kernel/time/posix-cpu-timers.c | 2 +- kernel/tsacct.c | 2 +- kernel/workqueue.c | 6 +++--- lib/dump_stack.c | 2 +- lib/nlattr.c | 6 +++--- mm/compaction.c | 2 +- mm/filemap.c | 4 ++-- mm/gup.c | 2 +- mm/memfd.c | 2 +- mm/memory-failure.c | 10 +++++----- mm/memory.c | 2 +- mm/mmap.c | 4 ++-- mm/oom_kill.c | 18 +++++++++--------- mm/page_alloc.c | 4 ++-- mm/util.c | 2 +- net/core/sock.c | 2 +- net/dns_resolver/internal.h | 2 +- net/ipv4/raw.c | 2 +- net/ipv4/tcp.c | 2 +- net/socket.c | 2 +- security/lsm_audit.c | 4 ++-- 85 files changed, 171 insertions(+), 161 deletions(-) diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index bed754b736d3..689c2b145fa1 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -245,7 +245,7 @@ static void arm64_show_signal(int signo, const char *str) !__ratelimit(&rs)) return; - pr_info("%s[%d]: unhandled exception: ", tsk->comm, task_pid_nr(tsk)); + pr_info("%s[%d]: unhandled exception: ", tsk->comm_str, task_pid_nr(tsk)); if (esr) pr_cont("%s, ESR 0x%016lx, ", esr_get_class_string(esr), esr); diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 1c78864767c5..c86ab5ae4532 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -891,7 +891,7 @@ static int kvm_init_ipa_range(struct kvm_s2_mmu *mmu, unsigned long type) phys_shift = KVM_PHYS_SHIFT; if (phys_shift > kvm_ipa_limit) { pr_warn_once("%s using unsupported default IPA limit, upgrade your VMM\n", - current->comm); + current->comm_str); return -EINVAL; } } diff --git a/block/blk-core.c b/block/blk-core.c index fdac48aec5ef..f93e2a1676b6 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -562,7 +562,7 @@ static inline int bio_check_eod(struct bio *bio) bio->bi_iter.bi_sector > maxsector - nr_sectors)) { pr_info_ratelimited("%s: attempt to access beyond end of device\n" "%pg: rw=%d, sector=%llu, nr_sectors = %u limit=%llu\n", - current->comm, bio->bi_bdev, bio->bi_opf, + current->comm_str, bio->bi_bdev, bio->bi_opf, bio->bi_iter.bi_sector, nr_sectors, maxsector); return -EIO; } diff --git a/block/bsg.c b/block/bsg.c index 72157a59b788..1f348e798cfa 100644 --- a/block/bsg.c +++ b/block/bsg.c @@ -151,7 +151,7 @@ static long bsg_ioctl(struct file *file, unsigned int cmd, unsigned long arg) return bsg_sg_io(bd, file->f_mode & FMODE_WRITE, uarg); case SCSI_IOCTL_SEND_COMMAND: pr_warn_ratelimited("%s: calling unsupported SCSI_IOCTL_SEND_COMMAND\n", - current->comm); + current->comm_str); return -EINVAL; default: return -ENOTTY; diff --git a/drivers/char/random.c b/drivers/char/random.c index d45383d57919..6f28a4d9af4a 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -1477,7 +1477,7 @@ static ssize_t urandom_read_iter(struct kiocb *kiocb, struct iov_iter *iter) else if (ratelimit_disable || __ratelimit(&urandom_warning)) { --maxwarn; pr_notice("%s: uninitialized urandom read (%zu bytes read)\n", - current->comm, iov_iter_count(iter)); + current->comm_str, iov_iter_count(iter)); } } diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 2930d6e23d40..f5b75c5837ff 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1405,7 +1405,7 @@ u32 hid_field_extract(const struct hid_device *hid, u8 *report, { if (n > 32) { hid_warn_once(hid, "%s() called with n (%d) > 32! (%s)\n", - __func__, n, current->comm); + __func__, n, current->comm_str); n = 32; } @@ -1451,7 +1451,7 @@ static void implement(const struct hid_device *hid, u8 *report, { if (unlikely(n > 32)) { hid_warn(hid, "%s() called with n (%d) > 32! (%s)\n", - __func__, n, current->comm); + __func__, n, current->comm_str); n = 32; } else if (n < 32) { u32 m = (1U << n) - 1; @@ -1459,7 +1459,7 @@ static void implement(const struct hid_device *hid, u8 *report, if (unlikely(value > m)) { hid_warn(hid, "%s() called with too large value %d (n: %d)! (%s)\n", - __func__, value, n, current->comm); + __func__, value, n, current->comm_str); value &= m; } } diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c index 21c2f9095bac..aa083b919532 100644 --- a/drivers/mmc/host/tmio_mmc_core.c +++ b/drivers/mmc/host/tmio_mmc_core.c @@ -951,13 +951,13 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) if (IS_ERR(host->mrq)) { dev_dbg(dev, "%s.%d: concurrent .set_ios(), clk %u, mode %u\n", - current->comm, task_pid_nr(current), + current->comm_str, task_pid_nr(current), ios->clock, ios->power_mode); host->mrq = ERR_PTR(-EINTR); } else { dev_dbg(dev, "%s.%d: CMD%u active since %lu, now %lu!\n", - current->comm, task_pid_nr(current), + current->comm_str, task_pid_nr(current), host->mrq->cmd->opcode, host->last_req_ts, jiffies); } @@ -1000,7 +1000,7 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) if (PTR_ERR(host->mrq) == -EINTR) dev_dbg(&host->pdev->dev, "%s.%d: IOS interrupted: clk %u, mode %u", - current->comm, task_pid_nr(current), + current->comm_str, task_pid_nr(current), ios->clock, ios->power_mode); /* Ready for new mrqs */ diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 5eea14c1f7f5..a59458f1b091 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -786,7 +786,7 @@ static ssize_t pci_write_config(struct file *filp, struct kobject *kobj, if (resource_is_exclusive(&dev->driver_exclusive_resource, off, count)) { pci_warn_once(dev, "%s: Unexpected write to kernel-exclusive config offset %llx", - current->comm, off); + current->comm_str, off); add_taint(TAINT_USER, LOCKDEP_STILL_OK); } diff --git a/drivers/scsi/scsi_ioctl.c b/drivers/scsi/scsi_ioctl.c index 0ddc95bafc71..4afeee7e9dec 100644 --- a/drivers/scsi/scsi_ioctl.c +++ b/drivers/scsi/scsi_ioctl.c @@ -894,7 +894,7 @@ int scsi_ioctl(struct scsi_device *sdev, bool open_for_write, int cmd, case SCSI_IOCTL_START_UNIT: case SCSI_IOCTL_STOP_UNIT: printk(KERN_WARNING "program %s is using a deprecated SCSI " - "ioctl, please convert it to SG_IO\n", current->comm); + "ioctl, please convert it to SG_IO\n", current->comm_str); break; default: break; diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index 86d404d649a3..66beaa8de571 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1017,7 +1017,7 @@ static int uart_set_info(struct tty_struct *tty, struct tty_port *port, if (uport->flags & UPF_SPD_MASK) { dev_notice_ratelimited(uport->dev, "%s sets custom speed on %s. This is deprecated.\n", - current->comm, + current->comm_str, tty_name(port->tty)); } uart_change_line_settings(tty, state, NULL); diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index e2d92cf70eb7..d354b0d986e7 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -2618,7 +2618,7 @@ static int tty_set_serial(struct tty_struct *tty, struct serial_struct *ss) if (flags) pr_warn_ratelimited("%s: '%s' is using deprecated serial flags (with no effect): %.8x\n", - __func__, current->comm, flags); + __func__, current->comm_str, flags); if (!tty->ops->set_serial) return -ENOTTY; @@ -3030,7 +3030,7 @@ void __do_SAK(struct tty_struct *tty) /* Kill the entire session */ do_each_pid_task(session, PIDTYPE_SID, p) { tty_notice(tty, "SAK: killed process %d (%s): by session\n", - task_pid_nr(p), p->comm); + task_pid_nr(p), p->comm_str); group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID); } while_each_pid_task(session, PIDTYPE_SID, p); @@ -3038,7 +3038,7 @@ void __do_SAK(struct tty_struct *tty) for_each_process_thread(g, p) { if (p->signal->tty == tty) { tty_notice(tty, "SAK: killed process %d (%s): by controlling tty\n", - task_pid_nr(p), p->comm); + task_pid_nr(p), p->comm_str); group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID); continue; @@ -3047,7 +3047,7 @@ void __do_SAK(struct tty_struct *tty) i = iterate_fd(p->files, 0, this_tty, tty); if (i != 0) { tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n", - task_pid_nr(p), p->comm, i - 1); + task_pid_nr(p), p->comm_str, i - 1); group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID); } diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index f6ce6e26e0d4..663e752aaa7c 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c @@ -849,7 +849,7 @@ static int checkintf(struct usb_dev_state *ps, unsigned int ifnum) /* if not yet claimed, claim it for the driver */ dev_warn(&ps->dev->dev, "usbfs: process %d (%s) did not claim " "interface %u before use\n", task_pid_nr(current), - current->comm, ifnum); + current->comm_str, ifnum); return claimintf(ps, ifnum); } @@ -924,7 +924,7 @@ static int check_ctrlrecip(struct usb_dev_state *ps, unsigned int requesttype, dev_info(&ps->dev->dev, "%s: process %i (%s) requesting ep %02x but needs %02x\n", __func__, task_pid_nr(current), - current->comm, index, index ^ 0x80); + current->comm_str, index, index ^ 0x80); } if (ret >= 0) ret = checkintf(ps, ret); @@ -1078,7 +1078,7 @@ static int usbdev_open(struct inode *inode, struct file *file) file->private_data = ps; usb_unlock_device(dev); snoop(&dev->dev, "opened by process %d: %s\n", task_pid_nr(current), - current->comm); + current->comm_str); return ret; out_unlock_device: @@ -1257,7 +1257,7 @@ static int do_proc_control(struct usb_dev_state *ps, if (i < 0 && i != -EPIPE) { dev_printk(KERN_DEBUG, &dev->dev, "usbfs: USBDEVFS_CONTROL " "failed cmd %s rqt %u rq %u len %u ret %d\n", - current->comm, ctrl->bRequestType, ctrl->bRequest, + current->comm_str, ctrl->bRequestType, ctrl->bRequest, ctrl->wLength, i); } ret = (i < 0 ? i : actlen); @@ -1389,7 +1389,7 @@ static void check_reset_of_active_ep(struct usb_device *udev, ep = eps[epnum & 0x0f]; if (ep && !list_empty(&ep->urb_list)) dev_warn(&udev->dev, "Process %d (%s) called USBDEVFS_%s for active endpoint 0x%02x\n", - task_pid_nr(current), current->comm, + task_pid_nr(current), current->comm_str, ioctl_name, epnum); } @@ -1517,7 +1517,7 @@ static int proc_resetdevice(struct usb_dev_state *ps) !test_bit(number, &ps->ifclaimed)) { dev_warn(&ps->dev->dev, "usbfs: interface %d claimed by %s while '%s' resets device\n", - number, interface->dev.driver->name, current->comm); + number, interface->dev.driver->name, current->comm_str); return -EACCES; } } @@ -1571,7 +1571,7 @@ static int proc_setconfig(struct usb_dev_state *ps, void __user *arg) ->desc.bInterfaceNumber, actconfig->interface[i] ->dev.driver->name, - current->comm, u); + current->comm_str, u); status = -EBUSY; break; } @@ -2428,7 +2428,7 @@ static int proc_claim_port(struct usb_dev_state *ps, void __user *arg) rc = usb_hub_claim_port(ps->dev, portnum, ps); if (rc == 0) snoop(&ps->dev->dev, "port %d claimed by process %d: %s\n", - portnum, task_pid_nr(current), current->comm); + portnum, task_pid_nr(current), current->comm_str); return rc; } diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index d2b2787be409..d33e8881281c 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -67,7 +67,7 @@ static int usb_start_wait_urb(struct urb *urb, int timeout, int *actual_length) dev_dbg(&urb->dev->dev, "%s timed out on ep%d%s len=%u/%u\n", - current->comm, + current->comm_str, usb_endpoint_num(&urb->ep->desc), usb_urb_dir_in(urb) ? "in" : "out", urb->actual_length, diff --git a/drivers/vfio/group.c b/drivers/vfio/group.c index c376a6279de0..991ca92e9eee 100644 --- a/drivers/vfio/group.c +++ b/drivers/vfio/group.c @@ -280,7 +280,7 @@ static struct file *vfio_device_open_file(struct vfio_device *device) if (device->group->type == VFIO_NO_IOMMU) dev_warn(device->dev, "vfio-noiommu device opened by user " - "(%s:%d)\n", current->comm, task_pid_nr(current)); + "(%s:%d)\n", current->comm_str, task_pid_nr(current)); /* * On success the ref of device is moved to the file and * put in vfio_device_fops_release() diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index 1136d7ac6b59..a2d34704f60f 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -778,7 +778,7 @@ static int vfio_pin_page_external(struct vfio_dma *dma, unsigned long vaddr, if (ret == -ENOMEM) pr_warn("%s: Task %s (%d) RLIMIT_MEMLOCK " "(%ld) exceeded\n", __func__, - dma->task->comm, task_pid_nr(dma->task), + dma->task->comm_str, task_pid_nr(dma->task), task_rlimit(dma->task, RLIMIT_MEMLOCK)); } } diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 5046cae05222..021e41bd7759 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -418,7 +418,7 @@ void vfio_unregister_group_dev(struct vfio_device *device) "Device is currently in use, task" " \"%s\" (%d) " "blocked until device is released", - current->comm, task_pid_nr(current)); + current->comm_str, task_pid_nr(current)); } } } diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c index 7e4a13e632dc..f51361e1e8e1 100644 --- a/drivers/xen/evtchn.c +++ b/drivers/xen/evtchn.c @@ -646,7 +646,7 @@ static int evtchn_open(struct inode *inode, struct file *filp) if (u == NULL) return -ENOMEM; - u->name = kasprintf(GFP_KERNEL, "evtchn:%s", current->comm); + u->name = kasprintf(GFP_KERNEL, "evtchn:%s", current->comm_str); if (u->name == NULL) { kfree(u); return -ENOMEM; diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c index 04a6b470b15d..6958ce227c4f 100644 --- a/drivers/xen/grant-table.c +++ b/drivers/xen/grant-table.c @@ -1163,7 +1163,7 @@ gnttab_retry_eagain_gop(unsigned int cmd, void *gop, int16_t *status, } while ((*status == GNTST_eagain) && (delay < MAX_DELAY)); if (delay >= MAX_DELAY) { - pr_err("%s: %s eagain grant\n", func, current->comm); + pr_err("%s: %s eagain grant\n", func, current->comm_str); *status = GNTST_bad_page; } } diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index ea3e184cd2e3..e304d19c72e1 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -386,7 +386,7 @@ static unsigned long elf_map(struct file *filep, unsigned long addr, if ((type & MAP_FIXED_NOREPLACE) && PTR_ERR((void *)map_addr) == -EEXIST) pr_info("%d (%s): Uhuuh, elf segment at %px requested but the memory is mapped already\n", - task_pid_nr(current), current->comm, (void *)addr); + task_pid_nr(current), current->comm_str, (void *)addr); return(map_addr); } diff --git a/fs/coredump.c b/fs/coredump.c index f88deb4701ac..0ea4bd2403a8 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -200,7 +200,7 @@ static int cn_print_exe_file(struct core_name *cn, bool name_only) exe_file = get_mm_exe_file(current->mm); if (!exe_file) - return cn_esc_printf(cn, "%s (path unknown)", current->comm); + return cn_esc_printf(cn, "%s (path unknown)", current->comm_str); pathbuf = kmalloc(PATH_MAX, GFP_KERNEL); if (!pathbuf) { @@ -417,7 +417,7 @@ static bool coredump_parse(struct core_name *cn, struct coredump_params *cprm, break; /* executable, could be changed by prctl PR_SET_NAME etc */ case 'e': - err = cn_esc_printf(cn, "%s", current->comm); + err = cn_esc_printf(cn, "%s", current->comm_str); break; /* file name of executable */ case 'f': diff --git a/fs/drop_caches.c b/fs/drop_caches.c index 019a8b4eaaf9..dbd3f2366028 100644 --- a/fs/drop_caches.c +++ b/fs/drop_caches.c @@ -70,7 +70,7 @@ static int drop_caches_sysctl_handler(const struct ctl_table *table, int write, } if (!stfu) { pr_info("%s (%d): drop_caches: %d\n", - current->comm, task_pid_nr(current), + current->comm_str, task_pid_nr(current), sysctl_drop_caches); } stfu |= sysctl_drop_caches & 4; diff --git a/fs/exec.c b/fs/exec.c index 2a1e5e4042a1..80c92fadb367 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1082,11 +1082,11 @@ static int unshare_sighand(struct task_struct *me) */ void __set_task_comm(struct task_struct *tsk, const char *buf, bool exec) { - size_t len = min(strlen(buf), sizeof(tsk->comm) - 1); + size_t len = min(strlen(buf), sizeof(tsk->comm_str) - 1); trace_task_rename(tsk, buf); - memcpy(tsk->comm, buf, len); - memset(&tsk->comm[len], 0, sizeof(tsk->comm) - len); + memcpy(tsk->comm_str, buf, len); + memset(&tsk->comm_str[len], 0, sizeof(tsk->comm_str) - len); perf_event_comm(tsk, exec); } @@ -1854,7 +1854,7 @@ static int do_execveat_common(int fd, struct filename *filename, bprm->argc = 1; pr_warn_once("process '%s' launched '%s' with NULL argv: empty string added\n", - current->comm, bprm->filename); + current->comm_str, bprm->filename); } retval = bprm_execve(bprm); diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c index d4164c507a90..5636a53b061e 100644 --- a/fs/ext4/dir.c +++ b/fs/ext4/dir.c @@ -537,7 +537,7 @@ static int call_filldir(struct file *file, struct dir_context *ctx, if (!fname) { ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: comm %s: " "called with null fname?!?", __func__, __LINE__, - inode->i_ino, current->comm); + inode->i_ino, current->comm_str); return 0; } ctx->pos = hash2pos(file, fname->hash, fname->minor_hash); diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 01c9b620b3f3..ed6743e660ce 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5235,7 +5235,7 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, return ERR_PTR(-ESTALE); __ext4_error(sb, function, line, false, EFSCORRUPTED, 0, "inode #%lu: comm %s: iget: illegal inode #", - ino, current->comm); + ino, current->comm_str); return ERR_PTR(-EFSCORRUPTED); } diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index a178ac229489..9e9c95e49587 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -147,7 +147,7 @@ static struct buffer_head *__ext4_read_dirblock(struct inode *inode, "inode #%lu: lblock %lu: comm %s: " "error %ld reading directory block", inode->i_ino, (unsigned long)block, - current->comm, PTR_ERR(bh)); + current->comm_str, PTR_ERR(bh)); return bh; } diff --git a/fs/ext4/super.c b/fs/ext4/super.c index d75b416401ae..a9e4e4898847 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -812,7 +812,7 @@ void __ext4_error(struct super_block *sb, const char *function, vaf.va = &args; printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n", - sb->s_id, function, line, current->comm, &vaf); + sb->s_id, function, line, current->comm_str, &vaf); va_end(args); } fsnotify_sb_error(sb, NULL, error ? error : EFSCORRUPTED); @@ -839,12 +839,12 @@ void __ext4_error_inode(struct inode *inode, const char *function, printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: " "inode #%lu: block %llu: comm %s: %pV\n", inode->i_sb->s_id, function, line, inode->i_ino, - block, current->comm, &vaf); + block, current->comm_str, &vaf); else printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: " "inode #%lu: comm %s: %pV\n", inode->i_sb->s_id, function, line, inode->i_ino, - current->comm, &vaf); + current->comm_str, &vaf); va_end(args); } fsnotify_sb_error(inode->i_sb, inode, error ? error : EFSCORRUPTED); @@ -878,13 +878,13 @@ void __ext4_error_file(struct file *file, const char *function, "EXT4-fs error (device %s): %s:%d: inode #%lu: " "block %llu: comm %s: path %s: %pV\n", inode->i_sb->s_id, function, line, inode->i_ino, - block, current->comm, path, &vaf); + block, current->comm_str, path, &vaf); else printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: inode #%lu: " "comm %s: path %s: %pV\n", inode->i_sb->s_id, function, line, inode->i_ino, - current->comm, path, &vaf); + current->comm_str, path, &vaf); va_end(args); } fsnotify_sb_error(inode->i_sb, inode, EFSCORRUPTED); @@ -1022,7 +1022,7 @@ void __ext4_warning_inode(const struct inode *inode, const char *function, vaf.va = &args; printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: " "inode #%lu: comm %s: %pV\n", inode->i_sb->s_id, - function, line, inode->i_ino, current->comm, &vaf); + function, line, inode->i_ino, current->comm_str, &vaf); va_end(args); } diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 14929fcea52d..d4263c3da019 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -1540,7 +1540,7 @@ struct file *hugetlb_file_setup(const char *name, size_t size, if (user_shm_lock(size, ucounts)) { pr_warn_once("%s (%d): Using mlock ulimits for SHM_HUGETLB is obsolete\n", - current->comm, current->pid); + current->comm_str, current->pid); user_shm_unlock(size, ucounts); } return ERR_PTR(-EPERM); diff --git a/fs/ioctl.c b/fs/ioctl.c index 0248cb8db2d3..3c543b581501 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c @@ -79,7 +79,7 @@ static int ioctl_fibmap(struct file *filp, int __user *p) if (block > INT_MAX) { error = -ERANGE; pr_warn_ratelimited("[%s/%d] FS: %s File: %pD4 would truncate fibmap result\n", - current->comm, task_pid_nr(current), + current->comm_str, task_pid_nr(current), sb->s_id, filp); } diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 844261a31156..231a1a904496 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -570,7 +570,7 @@ static int iomap_dio_iter(struct iomap_iter *iter, struct iomap_dio *dio) * DELALLOC block that the page-mkwrite allocated. */ pr_warn_ratelimited("Direct I/O collision with buffered writes! File: %pD4 Comm: %.20s\n", - dio->iocb->ki_filp, current->comm); + dio->iocb->ki_filp, current->comm_str); return -EIO; default: WARN_ON_ONCE(1); diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index c7867139af69..800c5aa86d49 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c @@ -329,7 +329,7 @@ static int start_this_handle(journal_t *journal, handle_t *handle, rsv_blocks + blocks > jbd2_max_user_trans_buffers(journal)) { printk(KERN_ERR "JBD2: %s wants too many credits " "credits:%d rsv_credits:%d max:%d\n", - current->comm, blocks, rsv_blocks, + current->comm_str, blocks, rsv_blocks, jbd2_max_user_trans_buffers(journal)); WARN_ON(1); return -ENOSPC; diff --git a/fs/locks.c b/fs/locks.c index 559f02aa4172..ba204c8b2316 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -2146,7 +2146,7 @@ SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd) * throw a warning to let people know that they don't actually work. */ if (cmd & LOCK_MAND) { - pr_warn_once("%s(%d): Attempt to set a LOCK_MAND lock via flock(2). This support has been removed and the request ignored.\n", current->comm, current->pid); + pr_warn_once("%s(%d): Attempt to set a LOCK_MAND lock via flock(2). This support has been removed and the request ignored.\n", current->comm_str, current->pid); return 0; } diff --git a/fs/netfs/internal.h b/fs/netfs/internal.h index d4f16fefd965..2988d5cf3c88 100644 --- a/fs/netfs/internal.h +++ b/fs/netfs/internal.h @@ -443,7 +443,7 @@ void fscache_create_volume(struct fscache_volume *volume, bool wait); * debug tracing */ #define dbgprintk(FMT, ...) \ - printk("[%-6.6s] "FMT"\n", current->comm, ##__VA_ARGS__) + printk("[%-6.6s] "FMT"\n", current->comm_str, ##__VA_ARGS__) #define kenter(FMT, ...) dbgprintk("==> %s("FMT")", __func__, ##__VA_ARGS__) #define kleave(FMT, ...) dbgprintk("<== %s()"FMT"", __func__, ##__VA_ARGS__) diff --git a/fs/proc/base.c b/fs/proc/base.c index e93149a01341..7f05e8b8f09a 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -1144,7 +1144,7 @@ static int __set_oom_adj(struct file *file, int oom_adj, bool legacy) * /proc/pid/oom_score_adj instead. */ pr_warn_once("%s (%d): /proc/%d/oom_adj is deprecated, please use /proc/%d/oom_score_adj instead.\n", - current->comm, task_pid_nr(current), task_pid_nr(task), + current->comm_str, task_pid_nr(current), task_pid_nr(task), task_pid_nr(task)); } else { if ((short)oom_adj < task->signal->oom_score_adj_min && diff --git a/fs/read_write.c b/fs/read_write.c index c5b6265d984b..5cb15fa8a3ed 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -499,7 +499,7 @@ static int warn_unsupported(struct file *file, const char *op) { pr_warn_ratelimited( "kernel %s not supported for file %pD4 (pid: %d comm: %.20s)\n", - op, file, current->pid, current->comm); + op, file, current->pid, current->comm_str); return -EINVAL; } diff --git a/fs/splice.c b/fs/splice.c index 4d6df083e0c0..b02395d5921f 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -920,7 +920,7 @@ static int warn_unsupported(struct file *file, const char *op) { pr_debug_ratelimited( "splice %s not supported for file %pD4 (pid: %d comm: %.20s)\n", - op, file, current->pid, current->comm); + op, file, current->pid, current->comm_str); return -EINVAL; } diff --git a/include/linux/coredump.h b/include/linux/coredump.h index 988b233dcc09..a53e5fe41b05 100644 --- a/include/linux/coredump.h +++ b/include/linux/coredump.h @@ -54,7 +54,7 @@ extern void vfs_coredump(const kernel_siginfo_t *siginfo); do { \ char comm[TASK_COMM_LEN]; \ /* This will always be NUL terminated. */ \ - memcpy(comm, current->comm, TASK_COMM_LEN); \ + memcpy(comm, current->comm_str, TASK_COMM_LEN); \ comm[TASK_COMM_LEN - 1] = '\0'; \ printk_ratelimited(Level "coredump: %d(%*pE): " Format "\n", \ task_tgid_vnr(current), (int)strlen(comm), comm, ##__VA_ARGS__); \ diff --git a/include/linux/filter.h b/include/linux/filter.h index eca229752cbe..2ae63a4c54c8 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -1285,7 +1285,7 @@ static inline void bpf_jit_dump(unsigned int flen, unsigned int proglen, u32 pass, void *image) { pr_err("flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n", flen, - proglen, pass, image, current->comm, task_pid_nr(current)); + proglen, pass, image, current->comm_str, task_pid_nr(current)); if (image) print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_OFFSET, diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h index 7aaad158ee37..751cd81867ef 100644 --- a/include/linux/ratelimit.h +++ b/include/linux/ratelimit.h @@ -58,7 +58,7 @@ static inline void ratelimit_state_exit(struct ratelimit_state *rs) m = ratelimit_state_reset_miss(rs); if (m) - pr_warn("%s: %d output lines suppressed due to ratelimiting\n", current->comm, m); + pr_warn("%s: %d output lines suppressed due to ratelimiting\n", current->comm_str, m); } static inline void diff --git a/include/linux/sched.h b/include/linux/sched.h index a4a23267a982..1cdfb024173e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -316,6 +316,7 @@ struct user_event_mm; */ enum { TASK_COMM_LEN = 16, + TASK_COMM_EXT_LEN = 64, }; extern void sched_tick(void); @@ -1158,7 +1159,7 @@ struct task_struct { * - logic inside set_task_comm() will ensure it is always NUL-terminated and * zero-padded */ - char comm[TASK_COMM_LEN]; + char comm_str[TASK_COMM_EXT_LEN]; struct nameidata *nameidata; @@ -1941,7 +1942,7 @@ extern void kick_process(struct task_struct *tsk); extern void __set_task_comm(struct task_struct *tsk, const char *from, bool exec); #define set_task_comm(tsk, from) ({ \ - BUILD_BUG_ON(sizeof(from) != TASK_COMM_LEN); \ + BUILD_BUG_ON(sizeof(from) < TASK_COMM_LEN); \ __set_task_comm(tsk, from, false); \ }) @@ -1960,7 +1961,11 @@ extern void __set_task_comm(struct task_struct *tsk, const char *from, bool exec */ #define get_task_comm(buf, tsk) ({ \ BUILD_BUG_ON(sizeof(buf) < TASK_COMM_LEN); \ - strscpy_pad(buf, (tsk)->comm); \ + strscpy_pad(buf, (tsk)->comm_str); \ + if ((sizeof(buf)) == TASK_COMM_LEN) \ + buf[TASK_COMM_LEN - 1] = '\0'; \ + else \ + buf[TASK_COMM_EXT_LEN - 1] = '\0'; \ buf; \ }) diff --git a/init/init_task.c b/init/init_task.c index e557f622bd90..afb815189efc 100644 --- a/init/init_task.c +++ b/init/init_task.c @@ -121,7 +121,7 @@ struct task_struct init_task __aligned(L1_CACHE_BYTES) = { .group_leader = &init_task, RCU_POINTER_INITIALIZER(real_cred, &init_cred), RCU_POINTER_INITIALIZER(cred, &init_cred), - .comm = INIT_TASK_COMM, + .comm_str = INIT_TASK_COMM, .thread = INIT_THREAD, .fs = &init_fs, .files = &init_files, diff --git a/ipc/sem.c b/ipc/sem.c index a39cdc7bf88f..764d03a43f6c 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -1083,7 +1083,7 @@ static int check_qop(struct sem_array *sma, int semnum, struct sem_queue *q, */ pr_info_once("semctl(GETNCNT/GETZCNT) is since 3.16 Single Unix Specification compliant.\n" "The task %s (%d) triggered the difference, watch for misbehavior.\n", - current->comm, task_pid_nr(current)); + current->comm_str, task_pid_nr(current)); if (sop->sem_num != semnum) return 0; diff --git a/kernel/acct.c b/kernel/acct.c index 6520baa13669..2e4a029d97c9 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -481,7 +481,7 @@ static void fill_ac(struct bsd_acct_struct *acct) memset(ac, 0, sizeof(acct_t)); ac->ac_version = ACCT_VERSION | ACCT_BYTEORDER; - strscpy(ac->ac_comm, current->comm, sizeof(ac->ac_comm)); + strscpy(ac->ac_comm, current->comm_str, sizeof(ac->ac_comm)); /* calculate run_time in nsec*/ run_time = ktime_get_ns(); diff --git a/kernel/audit.c b/kernel/audit.c index 61b5744d0bb6..cdead92ab251 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -1600,7 +1600,7 @@ static void audit_log_multicast(int group, const char *op, int err) { const struct cred *cred; struct tty_struct *tty; - char comm[sizeof(current->comm)]; + char comm[sizeof(current->comm_str)]; struct audit_buffer *ab; if (!audit_enabled) @@ -2243,7 +2243,7 @@ void audit_put_tty(struct tty_struct *tty) void audit_log_task_info(struct audit_buffer *ab) { const struct cred *cred; - char comm[sizeof(current->comm)]; + char comm[sizeof(current->comm_str)]; struct tty_struct *tty; if (!ab) diff --git a/kernel/auditsc.c b/kernel/auditsc.c index eb98cd6fe91f..89e7e972049e 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -2723,7 +2723,7 @@ void __audit_ptrace(struct task_struct *t) context->target_auid = audit_get_loginuid(t); context->target_uid = task_uid(t); context->target_sessionid = audit_get_sessionid(t); - strscpy(context->target_comm, t->comm); + strscpy(context->target_comm, t->comm_str); security_task_getlsmprop_obj(t, &context->target_ref); } @@ -2750,7 +2750,7 @@ int audit_signal_info_syscall(struct task_struct *t) ctx->target_auid = audit_get_loginuid(t); ctx->target_uid = t_uid; ctx->target_sessionid = audit_get_sessionid(t); - strscpy(ctx->target_comm, t->comm); + strscpy(ctx->target_comm, t->comm_str); security_task_getlsmprop_obj(t, &ctx->target_ref); return 0; } @@ -2772,7 +2772,7 @@ int audit_signal_info_syscall(struct task_struct *t) axp->target_uid[axp->pid_count] = t_uid; axp->target_sessionid[axp->pid_count] = audit_get_sessionid(t); security_task_getlsmprop_obj(t, &axp->target_ref[axp->pid_count]); - strscpy(axp->target_comm[axp->pid_count], t->comm); + strscpy(axp->target_comm[axp->pid_count], t->comm_str); axp->pid_count++; return 0; @@ -2919,7 +2919,7 @@ void __audit_log_nfcfg(const char *name, u8 af, unsigned int nentries, enum audit_nfcfgop op, gfp_t gfp) { struct audit_buffer *ab; - char comm[sizeof(current->comm)]; + char comm[sizeof(current->comm_str)]; ab = audit_log_start(audit_context(), gfp, AUDIT_NETFILTER_CFG); if (!ab) @@ -2940,7 +2940,7 @@ static void audit_log_task(struct audit_buffer *ab) kuid_t auid, uid; kgid_t gid; unsigned int sessionid; - char comm[sizeof(current->comm)]; + char comm[sizeof(current->comm_str)]; auid = audit_get_loginuid(current); sessionid = audit_get_sessionid(current); diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index 6b4877e85a68..9c3e48f1348f 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -266,7 +266,7 @@ BPF_CALL_2(bpf_get_current_comm, char *, buf, u32, size) goto err_clear; /* Verifier guarantees that size > 0 */ - strscpy_pad(buf, task->comm, size); + strscpy_pad(buf, task->comm_str, size); return 0; err_clear: memset(buf, 0, size); diff --git a/kernel/capability.c b/kernel/capability.c index 829f49ae07b9..73f945dadb58 100644 --- a/kernel/capability.c +++ b/kernel/capability.c @@ -39,7 +39,7 @@ __setup("no_file_caps", file_caps_disable); static void warn_legacy_capability_use(void) { pr_info_once("warning: `%s' uses 32-bit capabilities (legacy support in use)\n", - current->comm); + current->comm_str); } /* @@ -61,7 +61,7 @@ static void warn_legacy_capability_use(void) static void warn_deprecated_v2(void) { pr_info_once("warning: `%s' uses deprecated v2 capabilities in a way that may be insecure\n", - current->comm); + current->comm_str); } /* diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c index fa24c032ed6f..05e6a54d710f 100644 --- a/kernel/cgroup/cgroup-v1.c +++ b/kernel/cgroup/cgroup-v1.c @@ -1101,7 +1101,7 @@ int cgroup1_reconfigure(struct fs_context *fc) if (ctx->subsys_mask != root->subsys_mask || ctx->release_agent) pr_warn("option changes via remount are deprecated (pid=%d comm=%s)\n", - task_tgid_nr(current), current->comm); + task_tgid_nr(current), current->comm_str); added_mask = ctx->subsys_mask & ~root->subsys_mask; removed_mask = root->subsys_mask & ~ctx->subsys_mask; diff --git a/kernel/cred.c b/kernel/cred.c index 9676965c0981..2e5e9a60aee0 100644 --- a/kernel/cred.c +++ b/kernel/cred.c @@ -23,13 +23,13 @@ #if 0 #define kdebug(FMT, ...) \ printk("[%-5.5s%5u] " FMT "\n", \ - current->comm, current->pid, ##__VA_ARGS__) + current->comm_str, current->pid, ##__VA_ARGS__) #else #define kdebug(FMT, ...) \ do { \ if (0) \ no_printk("[%-5.5s%5u] " FMT "\n", \ - current->comm, current->pid, ##__VA_ARGS__); \ + current->comm_str, current->pid, ##__VA_ARGS__); \ } while (0) #endif diff --git a/kernel/events/core.c b/kernel/events/core.c index 22fdf0c187cd..e39c8556685a 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -8962,7 +8962,7 @@ static void perf_event_comm_event(struct perf_comm_event *comm_event) unsigned int size; memset(comm, 0, sizeof(comm)); - strscpy(comm, comm_event->task->comm); + strscpy(comm, comm_event->task->comm_str); size = ALIGN(strlen(comm)+1, sizeof(u64)); comm_event->comm = comm; diff --git a/kernel/exit.c b/kernel/exit.c index f03caf17b214..198227a39eb9 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -850,7 +850,7 @@ static void check_stack_usage(void) spin_lock(&low_water_lock); if (free < lowest_to_date) { pr_info("%s (%d) used greatest stack depth: %lu bytes left\n", - current->comm, task_pid_nr(current), free); + current->comm_str, task_pid_nr(current), free); lowest_to_date = free; } spin_unlock(&low_water_lock); @@ -1023,12 +1023,12 @@ void __noreturn make_task_dead(int signr) if (unlikely(irqs_disabled())) { pr_info("note: %s[%d] exited with irqs disabled\n", - current->comm, task_pid_nr(current)); + current->comm_str, task_pid_nr(current)); local_irq_enable(); } if (unlikely(in_atomic())) { pr_info("note: %s[%d] exited with preempt_count %d\n", - current->comm, task_pid_nr(current), + current->comm_str, task_pid_nr(current), preempt_count()); preempt_count_set(PREEMPT_ENABLED); } diff --git a/kernel/fork.c b/kernel/fork.c index cfe2f1df5f27..fd5bb94596ba 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1922,6 +1922,7 @@ __latent_entropy struct task_struct *copy_process( struct file *pidfile = NULL; const u64 clone_flags = args->flags; struct nsproxy *nsp = current->nsproxy; + unsigned char comm[TASK_COMM_EXT_LEN]; /* * Don't allow sharing the root directory with processes in a different @@ -2013,8 +2014,12 @@ __latent_entropy struct task_struct *copy_process( if (args->io_thread) p->flags |= PF_IO_WORKER; - if (args->name) - strscpy_pad(p->comm, args->name, sizeof(p->comm)); + if (args->name) { + memcpy(comm, args->name, sizeof(p->comm_str) - 1); + comm[sizeof(p->comm_str) - 1] = '\0'; + + set_task_comm(p, comm); + } p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? args->child_tid : NULL; /* diff --git a/kernel/freezer.c b/kernel/freezer.c index 8d530d0949ff..e5b066b7a166 100644 --- a/kernel/freezer.c +++ b/kernel/freezer.c @@ -64,7 +64,7 @@ bool __refrigerator(bool check_kthr_stop) unsigned int state = get_current_state(); bool was_frozen = false; - pr_debug("%s entered refrigerator\n", current->comm); + pr_debug("%s entered refrigerator\n", current->comm_str); WARN_ON_ONCE(state && !(state & TASK_NORMAL)); @@ -89,7 +89,7 @@ bool __refrigerator(bool check_kthr_stop) } __set_current_state(TASK_RUNNING); - pr_debug("%s left refrigerator\n", current->comm); + pr_debug("%s left refrigerator\n", current->comm_str); return was_frozen; } diff --git a/kernel/futex/waitwake.c b/kernel/futex/waitwake.c index e2bbe5509ec2..d72246096c06 100644 --- a/kernel/futex/waitwake.c +++ b/kernel/futex/waitwake.c @@ -214,7 +214,7 @@ static int futex_atomic_op_inuser(unsigned int encoded_op, u32 __user *uaddr) * is sane again */ pr_info_ratelimited("futex_wake_op: %s tries to shift op by %d; fix this program\n", - current->comm, oparg); + current->comm_str, oparg); oparg &= 31; } oparg = 1 << oparg; diff --git a/kernel/hung_task.c b/kernel/hung_task.c index 8708a1205f82..470ad5bdfc47 100644 --- a/kernel/hung_task.c +++ b/kernel/hung_task.c @@ -138,11 +138,11 @@ static void debug_show_blocker(struct task_struct *task) switch (blocker_type) { case BLOCKER_TYPE_MUTEX: pr_err("INFO: task %s:%d is blocked on a mutex, but the owner is not found.\n", - task->comm, task->pid); + task->comm_str, task->pid); break; case BLOCKER_TYPE_SEM: pr_err("INFO: task %s:%d is blocked on a semaphore, but the last holder is not found.\n", - task->comm, task->pid); + task->comm_str, task->pid); break; case BLOCKER_TYPE_RWSEM_READER: case BLOCKER_TYPE_RWSEM_WRITER: @@ -161,11 +161,11 @@ static void debug_show_blocker(struct task_struct *task) switch (blocker_type) { case BLOCKER_TYPE_MUTEX: pr_err("INFO: task %s:%d is blocked on a mutex likely owned by task %s:%d.\n", - task->comm, task->pid, t->comm, t->pid); + task->comm_str, task->pid, t->comm_str, t->pid); break; case BLOCKER_TYPE_SEM: pr_err("INFO: task %s:%d blocked on a semaphore likely last held by task %s:%d\n", - task->comm, task->pid, t->comm, t->pid); + task->comm_str, task->pid, t->comm_str, t->pid); break; case BLOCKER_TYPE_RWSEM_READER: case BLOCKER_TYPE_RWSEM_WRITER: @@ -233,7 +233,7 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout) if (sysctl_hung_task_warnings > 0) sysctl_hung_task_warnings--; pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n", - t->comm, t->pid, (jiffies - t->last_switch_time) / HZ); + t->comm_str, t->pid, (jiffies - t->last_switch_time) / HZ); pr_err(" %s %s %.*s\n", print_tainted(), init_utsname()->release, (int)strcspn(init_utsname()->version, " "), diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index c94837382037..6f52730f86e4 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -1175,7 +1175,7 @@ static void irq_thread_dtor(struct callback_head *unused) action = kthread_data(tsk); pr_err("exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n", - tsk->comm, tsk->pid, action->irq); + tsk->comm_str, tsk->pid, action->irq); desc = irq_to_desc(action->irq); diff --git a/kernel/kthread.c b/kernel/kthread.c index 0e98b228a8ef..4222e531d487 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -108,7 +108,7 @@ void get_kthread_comm(char *buf, size_t buf_size, struct task_struct *tsk) struct kthread *kthread = to_kthread(tsk); if (!kthread || !kthread->full_name) { - strscpy(buf, tsk->comm, buf_size); + strscpy(buf, tsk->comm_str, buf_size); return; } diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c index c80902eacd79..ab883220d4e8 100644 --- a/kernel/locking/rtmutex.c +++ b/kernel/locking/rtmutex.c @@ -712,7 +712,7 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task, prev_max = max_lock_depth; printk(KERN_WARNING "Maximum lock depth %d reached " "task: %s (%d)\n", max_lock_depth, - top_task->comm, task_pid_nr(top_task)); + top_task->comm_str, task_pid_nr(top_task)); } put_task_struct(task); diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 0efbcdda9aab..ba7f690c8ba9 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -777,7 +777,7 @@ static ssize_t devkmsg_write(struct kiocb *iocb, struct iov_iter *from) /* Ratelimit when not explicitly enabled. */ if (!(devkmsg_log & DEVKMSG_LOG_MASK_ON)) { - if (!___ratelimit(&user->rs, current->comm)) + if (!___ratelimit(&user->rs, current->comm_str)) return ret; } diff --git a/kernel/sched/core.c b/kernel/sched/core.c index ae360daf7d80..c4c437b1a035 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3240,7 +3240,7 @@ void force_compatible_cpus_allowed_ptr(struct task_struct *p) out_set_mask: if (printk_ratelimit()) { printk_deferred("Overriding affinity for process %d (%s) to CPUs %*pbl\n", - task_pid_nr(p), p->comm, + task_pid_nr(p), p->comm_str, cpumask_pr_args(override_mask)); } @@ -3545,7 +3545,7 @@ static int select_fallback_rq(int cpu, struct task_struct *p) */ if (p->mm && printk_ratelimit()) { printk_deferred("process %d (%s) no longer affine to cpu%d\n", - task_pid_nr(p), p->comm, cpu); + task_pid_nr(p), p->comm_str, cpu); } } @@ -5156,7 +5156,7 @@ static struct rq *finish_task_switch(struct task_struct *prev) */ if (WARN_ONCE(preempt_count() != 2*PREEMPT_DISABLE_OFFSET, "corrupted preempt_count: %s/%d/0x%x\n", - current->comm, current->pid, preempt_count())) + current->comm_str, current->pid, preempt_count())) preempt_count_set(FORK_PREEMPT_COUNT); rq->prev_mm = NULL; @@ -5849,7 +5849,7 @@ static noinline void __schedule_bug(struct task_struct *prev) return; printk(KERN_ERR "BUG: scheduling while atomic: %s/%d/0x%08x\n", - prev->comm, prev->pid, preempt_count()); + prev->comm_str, prev->pid, preempt_count()); debug_show_held_locks(prev); print_modules(); @@ -5881,7 +5881,7 @@ static inline void schedule_debug(struct task_struct *prev, bool preempt) #ifdef CONFIG_DEBUG_ATOMIC_SLEEP if (!preempt && READ_ONCE(prev->__state) && prev->non_block_count) { printk(KERN_ERR "BUG: scheduling in a non-blocking section: %s/%d/%i\n", - prev->comm, prev->pid, prev->non_block_count); + prev->comm_str, prev->pid, prev->non_block_count); dump_stack(); add_taint(TAINT_WARN, LOCKDEP_STILL_OK); } @@ -7645,7 +7645,7 @@ void sched_show_task(struct task_struct *p) if (!try_get_task_stack(p)) return; - pr_info("task:%-15.15s state:%c", p->comm, task_state_to_char(p)); + pr_info("task:%-15.15s state:%c", p->comm_str, task_state_to_char(p)); if (task_is_running(p)) pr_cont(" running task "); @@ -7786,7 +7786,7 @@ void __init init_idle(struct task_struct *idle, int cpu) idle->sched_class = &idle_sched_class; ftrace_graph_init_idle_task(idle, cpu); vtime_init_idle(idle, cpu); - sprintf(idle->comm, "%s/%d", INIT_TASK_COMM, cpu); + sprintf(idle->comm_str, "%s/%d", INIT_TASK_COMM, cpu); } int cpuset_cpumask_can_shrink(const struct cpumask *cur, @@ -8322,7 +8322,7 @@ static void dump_rq_tasks(struct rq *rq, const char *loglvl) if (!task_on_rq_queued(p)) continue; - printk("%s\tpid: %d, name: %s\n", loglvl, p->pid, p->comm); + printk("%s\tpid: %d, name: %s\n", loglvl, p->pid, p->comm_str); } } @@ -8667,7 +8667,7 @@ void __might_resched(const char *file, int line, unsigned int offsets) file, line); pr_err("in_atomic(): %d, irqs_disabled(): %d, non_block: %d, pid: %d, name: %s\n", in_atomic(), irqs_disabled(), current->non_block_count, - current->pid, current->comm); + current->pid, current->comm_str); pr_err("preempt_count: %x, expected: %x\n", preempt_count(), offsets & MIGHT_RESCHED_PREEMPT_MASK); @@ -8711,7 +8711,7 @@ void __cant_sleep(const char *file, int line, int preempt_offset) printk(KERN_ERR "BUG: assuming atomic context at %s:%d\n", file, line); printk(KERN_ERR "in_atomic(): %d, irqs_disabled(): %d, pid: %d, name: %s\n", in_atomic(), irqs_disabled(), - current->pid, current->comm); + current->pid, current->comm_str); debug_show_held_locks(current); dump_stack(); @@ -8743,7 +8743,7 @@ void __cant_migrate(const char *file, int line) pr_err("BUG: assuming non migratable context at %s:%d\n", file, line); pr_err("in_atomic(): %d, irqs_disabled(): %d, migration_disabled() %u pid: %d, name: %s\n", in_atomic(), irqs_disabled(), is_migration_disabled(current), - current->pid, current->comm); + current->pid, current->comm_str); debug_show_held_locks(current); dump_stack(); diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 3f06ab84d53f..24db33d9016e 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -734,7 +734,7 @@ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p) SEQ_printf(m, " %c", task_state_to_char(p)); SEQ_printf(m, " %15s %5d %9Ld.%06ld %c %9Ld.%06ld %c %9Ld.%06ld %9Ld.%06ld %9Ld %5d ", - p->comm, task_pid_nr(p), + p->comm_str, task_pid_nr(p), SPLIT_NS(p->se.vruntime), entity_eligible(cfs_rq_of(&p->se), &p->se) ? 'E' : 'N', SPLIT_NS(p->se.deadline), @@ -1150,7 +1150,7 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns, { unsigned long nr_switches; - SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr_ns(p, ns), + SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm_str, task_pid_nr_ns(p, ns), get_nr_threads(p)); SEQ_printf(m, "---------------------------------------------------------" diff --git a/kernel/signal.c b/kernel/signal.c index e2c928de7d2c..de0e1a413d04 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -257,7 +257,7 @@ static inline void print_dropped_signal(int sig) return; pr_info("%s/%d: reached RLIMIT_SIGPENDING, dropped signal %d\n", - current->comm, current->pid, sig); + current->comm_str, current->pid, sig); } /** @@ -1224,11 +1224,11 @@ static void print_fatal_signal(int signr) exe_file = get_task_exe_file(current); if (exe_file) { pr_info("%pD: %s: potentially unexpected fatal signal %d.\n", - exe_file, current->comm, signr); + exe_file, current->comm_str, signr); fput(exe_file); } else { pr_info("%s: potentially unexpected fatal signal %d.\n", - current->comm, signr); + current->comm_str, signr); } #if defined(__i386__) && !defined(__arch_um__) diff --git a/kernel/sys.c b/kernel/sys.c index 1e28b40053ce..25c79f78fbbf 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -2456,7 +2456,7 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, unsigned long, arg4, unsigned long, arg5) { struct task_struct *me = current; - unsigned char comm[sizeof(me->comm)]; + unsigned char comm[sizeof(me->comm_str)]; long error; error = security_task_prctl(option, arg2, arg3, arg4, arg5); @@ -2512,9 +2512,9 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, error = -EINVAL; break; case PR_SET_NAME: - comm[sizeof(me->comm) - 1] = 0; + comm[sizeof(me->comm_str) - 1] = 0; if (strncpy_from_user(comm, (char __user *)arg2, - sizeof(me->comm) - 1) < 0) + sizeof(me->comm_str) - 1) < 0) return -EFAULT; set_task_comm(me, comm); proc_comm_connector(me); diff --git a/kernel/sysctl.c b/kernel/sysctl.c index cb6196e3fa99..e5bceda6fc3d 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -140,7 +140,7 @@ static void warn_sysctl_write(const struct ctl_table *table) pr_warn_once("%s wrote to %s when file position was not 0!\n" "This will not be supported in the future. To silence this\n" "warning, set kernel.sysctl_writes_strict = -1\n", - current->comm, table->procname); + current->comm_str, table->procname); } /** diff --git a/kernel/time/itimer.c b/kernel/time/itimer.c index 876d389b2e21..7fda10130508 100644 --- a/kernel/time/itimer.c +++ b/kernel/time/itimer.c @@ -363,7 +363,7 @@ SYSCALL_DEFINE3(setitimer, int, which, struct __kernel_old_itimerval __user *, v memset(&set_buffer, 0, sizeof(set_buffer)); printk_once(KERN_WARNING "%s calls setitimer() with new_value NULL pointer." " Misfeature support will be removed\n", - current->comm); + current->comm_str); } error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : NULL); @@ -410,7 +410,7 @@ COMPAT_SYSCALL_DEFINE3(setitimer, int, which, memset(&set_buffer, 0, sizeof(set_buffer)); printk_once(KERN_WARNING "%s calls setitimer() with new_value NULL pointer." " Misfeature support will be removed\n", - current->comm); + current->comm_str); } error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : NULL); diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c index 2e5b89d7d866..19ed72294481 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -851,7 +851,7 @@ static bool check_rlimit(u64 time, u64 limit, int signo, bool rt, bool hard) if (print_fatal_signals) { pr_info("%s Watchdog Timeout (%s): %s[%d]\n", rt ? "RT" : "CPU", hard ? "hard" : "soft", - current->comm, task_pid_nr(current)); + current->comm_str, task_pid_nr(current)); } send_signal_locked(signo, SEND_SIG_PRIV, current, PIDTYPE_TGID); return true; diff --git a/kernel/tsacct.c b/kernel/tsacct.c index 16b283f9d831..6eaa5e0e20b4 100644 --- a/kernel/tsacct.c +++ b/kernel/tsacct.c @@ -76,7 +76,7 @@ void bacct_add_tsk(struct user_namespace *user_ns, stats->ac_minflt = tsk->min_flt; stats->ac_majflt = tsk->maj_flt; - strscpy_pad(stats->ac_comm, tsk->comm); + strscpy_pad(stats->ac_comm, tsk->comm_str); } diff --git a/kernel/workqueue.c b/kernel/workqueue.c index ae99311f1a96..a573cd6b26b3 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -3252,7 +3252,7 @@ __acquires(&pool->lock) rcu_preempt_depth() != rcu_start_depth)) { pr_err("BUG: workqueue leaked atomic, lock or RCU: %s[%d]\n" " preempt=0x%08x lock=%d->%d RCU=%d->%d workfn=%ps\n", - current->comm, task_pid_nr(current), preempt_count(), + current->comm_str, task_pid_nr(current), preempt_count(), lockdep_start_depth, lockdep_depth(current), rcu_start_depth, rcu_preempt_depth(), worker->current_func); @@ -3716,7 +3716,7 @@ static void check_flush_dependency(struct workqueue_struct *target_wq, WARN_ONCE(current->flags & PF_MEMALLOC, "workqueue: PF_MEMALLOC task %d(%s) is flushing !WQ_MEM_RECLAIM %s:%ps", - current->pid, current->comm, target_wq->name, target_func); + current->pid, current->comm_str, target_wq->name, target_func); WARN_ONCE(worker && ((worker->current_pwq->wq->flags & (WQ_MEM_RECLAIM | __WQ_LEGACY)) == WQ_MEM_RECLAIM), "workqueue: WQ_MEM_RECLAIM %s:%ps is flushing !WQ_MEM_RECLAIM %s:%ps", @@ -6486,7 +6486,7 @@ void wq_worker_comm(char *buf, size_t size, struct task_struct *task) raw_spin_unlock_irq(&pool->lock); } } else { - strscpy(buf, task->comm, size); + strscpy(buf, task->comm_str, size); } mutex_unlock(&wq_pool_attach_mutex); diff --git a/lib/dump_stack.c b/lib/dump_stack.c index b3a85fe8b673..5ebf7503f3c6 100644 --- a/lib/dump_stack.c +++ b/lib/dump_stack.c @@ -57,7 +57,7 @@ void dump_stack_print_info(const char *log_lvl) printk("%sCPU: %d UID: %u PID: %d Comm: %.20s %s%s %s %.*s %s " BUILD_ID_FMT "\n", log_lvl, raw_smp_processor_id(), __kuid_val(current_real_cred()->euid), - current->pid, current->comm, + current->pid, current->comm_str, kexec_crash_loaded() ? "Kdump: loaded " : "", print_tainted(), init_utsname()->release, diff --git a/lib/nlattr.c b/lib/nlattr.c index be9c576b6e2d..994a4ae5b2ec 100644 --- a/lib/nlattr.c +++ b/lib/nlattr.c @@ -212,7 +212,7 @@ static int nla_validate_range_unsigned(const struct nla_policy *pt, if (pt->validation_type == NLA_VALIDATE_RANGE_WARN_TOO_LONG && pt->type == NLA_BINARY && value > range.max) { pr_warn_ratelimited("netlink: '%s': attribute type %d has an invalid length.\n", - current->comm, pt->type); + current->comm_str, pt->type); if (validate & NL_VALIDATE_STRICT_ATTRS) { NL_SET_ERR_MSG_ATTR_POL(extack, nla, pt, "invalid attribute length"); @@ -412,7 +412,7 @@ static int validate_nla(const struct nlattr *nla, int maxtype, if (nla_attr_len[pt->type] && attrlen != nla_attr_len[pt->type]) { pr_warn_ratelimited("netlink: '%s': attribute type %d has an invalid length.\n", - current->comm, type); + current->comm_str, type); if (validate & NL_VALIDATE_STRICT_ATTRS) { NL_SET_ERR_MSG_ATTR_POL(extack, nla, pt, "invalid attribute length"); @@ -645,7 +645,7 @@ static int __nla_validate_parse(const struct nlattr *head, int len, int maxtype, if (unlikely(rem > 0)) { pr_warn_ratelimited("netlink: %d bytes leftover after parsing attributes in process `%s'.\n", - rem, current->comm); + rem, current->comm_str); NL_SET_ERR_MSG(extack, "bytes leftover after parsing attributes"); if (validate & NL_VALIDATE_TRAILING) return -EINVAL; diff --git a/mm/compaction.c b/mm/compaction.c index bf021b31c7ec..e89741a68834 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -3278,7 +3278,7 @@ static int proc_dointvec_minmax_warn_RT_change(const struct ctl_table *table, return ret; if (old != *(int *)table->data) pr_warn_once("sysctl attribute %s changed by %s[%d]\n", - table->procname, current->comm, + table->procname, current->comm_str, task_pid_nr(current)); return ret; } diff --git a/mm/filemap.c b/mm/filemap.c index 413492492b5a..085335253b11 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -154,7 +154,7 @@ static void filemap_unaccount_folio(struct address_space *mapping, VM_BUG_ON_FOLIO(folio_mapped(folio), folio); if (!IS_ENABLED(CONFIG_DEBUG_VM) && unlikely(folio_mapped(folio))) { pr_alert("BUG: Bad page cache in process %s pfn:%05lx\n", - current->comm, folio_pfn(folio)); + current->comm_str, folio_pfn(folio)); dump_page(&folio->page, "still mapped when deleted"); dump_stack(); add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); @@ -4084,7 +4084,7 @@ static void dio_warn_stale_pagecache(struct file *filp) path = "(unknown)"; pr_crit("Page cache invalidation failure on direct I/O. Possible data corruption due to collision with buffered I/O!\n"); pr_crit("File: %s PID: %d Comm: %.20s\n", path, current->pid, - current->comm); + current->comm_str); } } diff --git a/mm/gup.c b/mm/gup.c index adffe663594d..ca529d439e72 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1308,7 +1308,7 @@ static struct vm_area_struct *gup_vma_lookup(struct mm_struct *mm, /* Let people know things may have changed. */ pr_warn("GUP no longer grows the stack in %s (%d): %lx-%lx (%lx)\n", - current->comm, task_pid_nr(current), + current->comm_str, task_pid_nr(current), vma->vm_start, vma->vm_end, addr); dump_stack(); return NULL; diff --git a/mm/memfd.c b/mm/memfd.c index bbe679895ef6..acfdb41ed161 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -331,7 +331,7 @@ static int check_sysctl_memfd_noexec(unsigned int *flags) if (!(*flags & MFD_NOEXEC_SEAL) && sysctl >= MEMFD_NOEXEC_SCOPE_NOEXEC_ENFORCED) { pr_err_ratelimited( "%s[%d]: memfd_create() requires MFD_NOEXEC_SEAL with vm.memfd_noexec=%d\n", - current->comm, task_pid_nr(current), sysctl); + current->comm_str, task_pid_nr(current), sysctl); return -EACCES; } #endif diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 003b51e4adc0..b81dd0b7a5a3 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -354,7 +354,7 @@ static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags) int ret = 0; pr_err("%#lx: Sending SIGBUS to %s:%d due to hardware memory corruption\n", - pfn, t->comm, task_pid_nr(t)); + pfn, t->comm_str, task_pid_nr(t)); if ((flags & MF_ACTION_REQUIRED) && (t == current)) ret = force_sig_mceerr(BUS_MCEERR_AR, @@ -370,7 +370,7 @@ static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags) addr_lsb, t); if (ret < 0) pr_info("Error sending signal to %s:%d: %d\n", - t->comm, task_pid_nr(t), ret); + t->comm_str, task_pid_nr(t), ret); return ret; } @@ -475,7 +475,7 @@ static void __add_to_kill(struct task_struct *tsk, const struct page *p, */ if (tk->addr == -EFAULT) { pr_info("Unable to find user space address %lx in %s\n", - page_to_pfn(p), tsk->comm); + page_to_pfn(p), tsk->comm_str); } else if (tk->size_shift == 0) { kfree(tk); return; @@ -532,7 +532,7 @@ static void kill_procs(struct list_head *to_kill, int forcekill, if (forcekill) { if (tk->addr == -EFAULT) { pr_err("%#lx: forcibly killing %s:%d because of failure to unmap corrupted page\n", - pfn, tk->tsk->comm, task_pid_nr(tk->tsk)); + pfn, tk->tsk->comm_str, task_pid_nr(tk->tsk)); do_send_sig_info(SIGKILL, SEND_SIG_PRIV, tk->tsk, PIDTYPE_PID); } @@ -545,7 +545,7 @@ static void kill_procs(struct list_head *to_kill, int forcekill, */ else if (kill_proc(tk, pfn, flags) < 0) pr_err("%#lx: Cannot send advisory machine check signal to %s:%d\n", - pfn, tk->tsk->comm, task_pid_nr(tk->tsk)); + pfn, tk->tsk->comm_str, task_pid_nr(tk->tsk)); } list_del(&tk->nd); put_task_struct(tk->tsk); diff --git a/mm/memory.c b/mm/memory.c index 4020639593ce..c7049ced1ae3 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -540,7 +540,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr, index = linear_page_index(vma, addr); pr_alert("BUG: Bad page map in process %s pte:%08llx pmd:%08llx\n", - current->comm, + current->comm_str, (long long)pte_val(pte), (long long)pmd_val(*pmd)); if (page) dump_page(page, "bad pte"); diff --git a/mm/mmap.c b/mm/mmap.c index 7306253cc3b5..c5971b26b005 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1096,7 +1096,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, vm_flags_t vm_flags; pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/mm/remap_file_pages.rst.\n", - current->comm, current->pid); + current->comm_str, current->pid); if (prot) return ret; @@ -1334,7 +1334,7 @@ bool may_expand_vm(struct mm_struct *mm, vm_flags_t flags, unsigned long npages) return true; pr_warn_once("%s (%d): VmData %lu exceed data ulimit %lu. Update limits%s.\n", - current->comm, current->pid, + current->comm_str, current->pid, (mm->data_vm + npages) << PAGE_SHIFT, rlimit(RLIMIT_DATA), ignore_rlimit_data ? "" : " or use boot option ignore_rlimit_data"); diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 25923cfec9c6..023eec5ec9c3 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -406,7 +406,7 @@ static int dump_task(struct task_struct *p, void *arg) get_mm_counter(task->mm, MM_ANONPAGES), get_mm_counter(task->mm, MM_FILEPAGES), get_mm_counter(task->mm, MM_SHMEMPAGES), mm_pgtables_bytes(task->mm), get_mm_counter(task->mm, MM_SWAPENTS), - task->signal->oom_score_adj, task->comm); + task->signal->oom_score_adj, task->comm_str); task_unlock(task); return 0; @@ -452,14 +452,14 @@ static void dump_oom_victim(struct oom_control *oc, struct task_struct *victim) nodemask_pr_args(oc->nodemask)); cpuset_print_current_mems_allowed(); mem_cgroup_print_oom_context(oc->memcg, victim); - pr_cont(",task=%s,pid=%d,uid=%d\n", victim->comm, victim->pid, + pr_cont(",task=%s,pid=%d,uid=%d\n", victim->comm_str, victim->pid, from_kuid(&init_user_ns, task_uid(victim))); } static void dump_header(struct oom_control *oc) { pr_warn("%s invoked oom-killer: gfp_mask=%#x(%pGg), order=%d, oom_score_adj=%hd\n", - current->comm, oc->gfp_mask, &oc->gfp_mask, oc->order, + current->comm_str, oc->gfp_mask, &oc->gfp_mask, oc->order, current->signal->oom_score_adj); if (!IS_ENABLED(CONFIG_COMPACTION) && oc->order) pr_warn("COMPACTION is disabled!!!\n"); @@ -596,7 +596,7 @@ static bool oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm) goto out_finish; pr_info("oom_reaper: reaped process %d (%s), now anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n", - task_pid_nr(tsk), tsk->comm, + task_pid_nr(tsk), tsk->comm_str, K(get_mm_counter(mm, MM_ANONPAGES)), K(get_mm_counter(mm, MM_FILEPAGES)), K(get_mm_counter(mm, MM_SHMEMPAGES))); @@ -623,7 +623,7 @@ static void oom_reap_task(struct task_struct *tsk) goto done; pr_info("oom_reaper: unable to reap pid:%d (%s)\n", - task_pid_nr(tsk), tsk->comm); + task_pid_nr(tsk), tsk->comm_str); sched_show_task(tsk); debug_show_all_locks(); @@ -927,7 +927,7 @@ static void __oom_kill_process(struct task_struct *victim, const char *message) p = find_lock_task_mm(victim); if (!p) { pr_info("%s: OOM victim %d (%s) is already exiting. Skip killing the task\n", - message, task_pid_nr(victim), victim->comm); + message, task_pid_nr(victim), victim->comm_str); put_task_struct(victim); return; } else if (victim != p) { @@ -952,7 +952,7 @@ static void __oom_kill_process(struct task_struct *victim, const char *message) do_send_sig_info(SIGKILL, SEND_SIG_PRIV, victim, PIDTYPE_TGID); mark_oom_victim(victim); pr_err("%s: Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB, UID:%u pgtables:%lukB oom_score_adj:%hd\n", - message, task_pid_nr(victim), victim->comm, K(mm->total_vm), + message, task_pid_nr(victim), victim->comm_str, K(mm->total_vm), K(get_mm_counter(mm, MM_ANONPAGES)), K(get_mm_counter(mm, MM_FILEPAGES)), K(get_mm_counter(mm, MM_SHMEMPAGES)), @@ -979,8 +979,8 @@ static void __oom_kill_process(struct task_struct *victim, const char *message) can_oom_reap = false; set_bit(MMF_OOM_SKIP, &mm->flags); pr_info("oom killer %d (%s) has mm pinned by %d (%s)\n", - task_pid_nr(victim), victim->comm, - task_pid_nr(p), p->comm); + task_pid_nr(victim), victim->comm_str, + task_pid_nr(p), p->comm_str); continue; } /* diff --git a/mm/page_alloc.c b/mm/page_alloc.c index fa09154a799c..92de19bdf9d4 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -643,7 +643,7 @@ static void bad_page(struct page *page, const char *reason) resume = jiffies + 60 * HZ; pr_alert("BUG: Bad page state in process %s pfn:%05lx\n", - current->comm, page_to_pfn(page)); + current->comm_str, page_to_pfn(page)); dump_page(page, reason); print_modules(); @@ -3923,7 +3923,7 @@ void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...) vaf.fmt = fmt; vaf.va = &args; pr_warn("%s: %pV, mode:%#x(%pGg), nodemask=%*pbl", - current->comm, &vaf, gfp_mask, &gfp_mask, + current->comm_str, &vaf, gfp_mask, &gfp_mask, nodemask_pr_args(nodemask)); va_end(args); diff --git a/mm/util.c b/mm/util.c index 68ea833ba25f..0995f8e90edb 100644 --- a/mm/util.c +++ b/mm/util.c @@ -965,7 +965,7 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin) error: bytes_failed = pages << PAGE_SHIFT; pr_warn_ratelimited("%s: pid: %d, comm: %s, bytes: %lu not enough memory for the allocation\n", - __func__, current->pid, current->comm, bytes_failed); + __func__, current->pid, current->comm_str, bytes_failed); vm_unacct_memory(pages); return -ENOMEM; diff --git a/net/core/sock.c b/net/core/sock.c index 8b7623c7d547..516eab62f3c9 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -443,7 +443,7 @@ static int sock_set_timeout(long *timeo_p, sockptr_t optval, int optlen, if (warned < 10 && net_ratelimit()) { warned++; pr_info("%s: `%s' (pid %d) tries to set negative timeout\n", - __func__, current->comm, task_pid_nr(current)); + __func__, current->comm_str, task_pid_nr(current)); } return 0; } diff --git a/net/dns_resolver/internal.h b/net/dns_resolver/internal.h index 0c570d40e4d6..447b1256bf42 100644 --- a/net/dns_resolver/internal.h +++ b/net/dns_resolver/internal.h @@ -44,7 +44,7 @@ extern unsigned int dns_resolver_debug; do { \ if (unlikely(dns_resolver_debug)) \ printk(KERN_DEBUG "[%-6.6s] "FMT"\n", \ - current->comm, ##__VA_ARGS__); \ + current->comm_str, ##__VA_ARGS__); \ } while (0) #define kenter(FMT, ...) kdebug("==> %s("FMT")", __func__, ##__VA_ARGS__) diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 1d2c89d63cc7..5037968c95dd 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -520,7 +520,7 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) goto out; if (usin->sin_family != AF_INET) { pr_info_once("%s: %s forgot to set AF_INET. Fix it!\n", - __func__, current->comm); + __func__, current->comm_str); err = -EAFNOSUPPORT; if (usin->sin_family) goto out; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 31149a0ac849..c98e4d577ea3 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2761,7 +2761,7 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len, if ((flags & MSG_PEEK) && (peek_seq - peek_offset - copied - urg_hole != tp->copied_seq)) { net_dbg_ratelimited("TCP(%s:%d): Application bug, race in MSG_PEEK\n", - current->comm, + current->comm_str, task_pid_nr(current)); peek_seq = tp->copied_seq + peek_offset; } diff --git a/net/socket.c b/net/socket.c index 682969deaed3..df2f3d0c10b4 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1537,7 +1537,7 @@ int __sock_create(struct net *net, int family, int type, int protocol, */ if (family == PF_INET && type == SOCK_PACKET) { pr_info_once("%s uses obsolete (PF_INET,SOCK_PACKET)\n", - current->comm); + current->comm_str); family = PF_PACKET; } diff --git a/security/lsm_audit.c b/security/lsm_audit.c index 7d623b00495c..c64dce81e4f2 100644 --- a/security/lsm_audit.c +++ b/security/lsm_audit.c @@ -274,7 +274,7 @@ void audit_log_lsm_data(struct audit_buffer *ab, if (tsk) { pid_t pid = task_tgid_nr(tsk); if (pid) { - char tskcomm[sizeof(tsk->comm)]; + char tskcomm[TASK_COMM_LEN]; audit_log_format(ab, " opid=%d ocomm=", pid); audit_log_untrustedstring(ab, get_task_comm(tskcomm, tsk)); @@ -414,7 +414,7 @@ void audit_log_lsm_data(struct audit_buffer *ab, static void dump_common_audit_data(struct audit_buffer *ab, const struct common_audit_data *a) { - char comm[sizeof(current->comm)]; + char comm[TASK_COMM_LEN]; audit_log_format(ab, " pid=%d comm=", task_tgid_nr(current)); audit_log_untrustedstring(ab, get_task_comm(comm, current)); -- 2.38.1