linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Naresh Kamboju <naresh.kamboju@linaro.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: open list <linux-kernel@vger.kernel.org>,
	linux- stable <stable@vger.kernel.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Muchun Song <songmuchun@bytedance.com>,
	Chengming Zhou <zhouchengming@bytedance.com>,
	"Steven Rostedt (VMware)" <rostedt@goodmis.org>
Subject: Re: [PATCH 4.19 38/92] kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler
Date: Tue, 29 Sep 2020 01:32:59 +0530	[thread overview]
Message-ID: <CA+G9fYvdQv2Ukvs-UKiEgYaDdBthsWsY=35cQ4YpvMhA0hU5Gg@mail.gmail.com> (raw)
In-Reply-To: <20200820091539.592290034@linuxfoundation.org>

On Thu, 20 Aug 2020 at 15:23, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> From: Muchun Song <songmuchun@bytedance.com>
>
> commit 0cb2f1372baa60af8456388a574af6133edd7d80 upstream.
>
> We found a case of kernel panic on our server. The stack trace is as
> follows(omit some irrelevant information):
>
>   BUG: kernel NULL pointer dereference, address: 0000000000000080
>   RIP: 0010:kprobe_ftrace_handler+0x5e/0xe0
>   RSP: 0018:ffffb512c6550998 EFLAGS: 00010282
>   RAX: 0000000000000000 RBX: ffff8e9d16eea018 RCX: 0000000000000000
>   RDX: ffffffffbe1179c0 RSI: ffffffffc0535564 RDI: ffffffffc0534ec0
>   RBP: ffffffffc0534ec1 R08: ffff8e9d1bbb0f00 R09: 0000000000000004
>   R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
>   R13: ffff8e9d1f797060 R14: 000000000000bacc R15: ffff8e9ce13eca00
>   CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>   CR2: 0000000000000080 CR3: 00000008453d0005 CR4: 00000000003606e0
>   DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
>   DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
>   Call Trace:
>    <IRQ>
>    ftrace_ops_assist_func+0x56/0xe0
>    ftrace_call+0x5/0x34
>    tcpa_statistic_send+0x5/0x130 [ttcp_engine]
>
> The tcpa_statistic_send is the function being kprobed. After analysis,
> the root cause is that the fourth parameter regs of kprobe_ftrace_handler
> is NULL. Why regs is NULL? We use the crash tool to analyze the kdump.
>
>   crash> dis tcpa_statistic_send -r
>          <tcpa_statistic_send>: callq 0xffffffffbd8018c0 <ftrace_caller>
>
> The tcpa_statistic_send calls ftrace_caller instead of ftrace_regs_caller.
> So it is reasonable that the fourth parameter regs of kprobe_ftrace_handler
> is NULL. In theory, we should call the ftrace_regs_caller instead of the
> ftrace_caller. After in-depth analysis, we found a reproducible path.
>
>   Writing a simple kernel module which starts a periodic timer. The
>   timer's handler is named 'kprobe_test_timer_handler'. The module
>   name is kprobe_test.ko.
>
>   1) insmod kprobe_test.ko
>   2) bpftrace -e 'kretprobe:kprobe_test_timer_handler {}'
>   3) echo 0 > /proc/sys/kernel/ftrace_enabled
>   4) rmmod kprobe_test
>   5) stop step 2) kprobe
>   6) insmod kprobe_test.ko
>   7) bpftrace -e 'kretprobe:kprobe_test_timer_handler {}'
>
> We mark the kprobe as GONE but not disarm the kprobe in the step 4).
> The step 5) also do not disarm the kprobe when unregister kprobe. So
> we do not remove the ip from the filter. In this case, when the module
> loads again in the step 6), we will replace the code to ftrace_caller
> via the ftrace_module_enable(). When we register kprobe again, we will
> not replace ftrace_caller to ftrace_regs_caller because the ftrace is
> disabled in the step 3). So the step 7) will trigger kernel panic. Fix
> this problem by disarming the kprobe when the module is going away.
>
> Link: https://lkml.kernel.org/r/20200728064536.24405-1-songmuchun@bytedance.com
>
> Cc: stable@vger.kernel.org
> Fixes: ae6aa16fdc16 ("kprobes: introduce ftrace based optimization")
> Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
> Co-developed-by: Chengming Zhou <zhouchengming@bytedance.com>
> Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>


stable rc branch 4.19 build warning on arm64.

../kernel/kprobes.c: In function ‘kill_kprobe’:
../kernel/kprobes.c:1070:33: warning: statement with no effect [-Wunused-value]
 1070 | #define disarm_kprobe_ftrace(p) (-ENODEV)
      |                                 ^
../kernel/kprobes.c:2090:3: note: in expansion of macro ‘disarm_kprobe_ftrace’
 2090 |   disarm_kprobe_ftrace(p);
      |   ^~~~~~~~~~~~~~~~~~~~


>
> ---
>  kernel/kprobes.c |    7 +++++++
>  1 file changed, 7 insertions(+)
>
> --- a/kernel/kprobes.c
> +++ b/kernel/kprobes.c
> @@ -2077,6 +2077,13 @@ static void kill_kprobe(struct kprobe *p
>          * the original probed function (which will be freed soon) any more.
>          */
>         arch_remove_kprobe(p);
> +
> +       /*
> +        * The module is going away. We should disarm the kprobe which
> +        * is using ftrace.
> +        */
> +       if (kprobe_ftrace(p))
> +               disarm_kprobe_ftrace(p);
>  }
>
>  /* Disable one kprobe */
>


-- 
Linaro LKFT
https://lkft.linaro.org

  reply	other threads:[~2020-09-28 20:03 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-20  9:20 [PATCH 4.19 00/92] 4.19.141-rc1 review Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 01/92] smb3: warn on confusing error scenario with sec=krb5 Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 02/92] genirq/affinity: Make affinity setting if activated opt-in Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 03/92] PCI: hotplug: ACPI: Fix context refcounting in acpiphp_grab_context() Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 04/92] PCI: Mark AMD Navi10 GPU rev 0x00 ATS as broken Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 05/92] PCI: Add device even if driver attach failed Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 06/92] PCI: qcom: Define some PARF params needed for ipq8064 SoC Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 07/92] PCI: qcom: Add support for tx term offset for rev 2.1.0 Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 08/92] PCI: Probe bridge window attributes once at enumeration-time Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 09/92] btrfs: free anon block device right after subvolume deletion Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 10/92] btrfs: dont allocate anonymous block device for user invisible roots Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 11/92] btrfs: ref-verify: fix memory leak in add_block_entry Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 12/92] btrfs: dont traverse into the seed devices in show_devname Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 13/92] btrfs: open device without device_list_mutex Greg Kroah-Hartman
2020-08-20  9:20 ` [PATCH 4.19 14/92] btrfs: fix messages after changing compression level by remount Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 15/92] btrfs: only search for left_info if there is no right_info in try_merge_free_space Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 16/92] btrfs: fix memory leaks after failure to lookup checksums during inode logging Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 17/92] btrfs: fix return value mixup in btrfs_get_extent Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 18/92] dt-bindings: iio: io-channel-mux: Fix compatible string in example code Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 19/92] iio: dac: ad5592r: fix unbalanced mutex unlocks in ad5592r_read_raw() Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 20/92] xtensa: fix xtensa_pmu_setup prototype Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 21/92] cifs: Fix leak when handling lease break for cached root fid Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 22/92] powerpc: Allow 4224 bytes of stack expansion for the signal frame Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 23/92] powerpc: Fix circular dependency between percpu.h and mmu.h Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 24/92] media: vsp1: dl: Fix NULL pointer dereference on unbind Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 25/92] net: ethernet: stmmac: Disable hardware multicast filter Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 26/92] net: stmmac: dwmac1000: provide multicast filter fallback Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 27/92] net/compat: Add missing sock updates for SCM_RIGHTS Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 28/92] md/raid5: Fix Force reconstruct-write io stuck in degraded raid5 Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 29/92] bcache: allocate meta data pages as compound pages Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 30/92] bcache: fix overflow in offset_to_stripe() Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 31/92] mac80211: fix misplaced while instead of if Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 32/92] driver core: Avoid binding drivers to dead devices Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 33/92] MIPS: CPU#0 is not hotpluggable Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 34/92] ext2: fix missing percpu_counter_inc Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 35/92] ocfs2: change slot number type s16 to u16 Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 36/92] mm/page_counter.c: fix protection usage propagation Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 37/92] ftrace: Setup correct FTRACE_FL_REGS flags for module Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 38/92] kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler Greg Kroah-Hartman
2020-09-28 20:02   ` Naresh Kamboju [this message]
2020-09-28 22:09     ` Steven Rostedt
2020-09-28 22:15       ` Steven Rostedt
2020-09-29  5:49         ` Masami Hiramatsu
2020-09-29  6:52           ` Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 39/92] tracing/hwlat: Honor the tracing_cpumask Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 40/92] tracing: Use trace_sched_process_free() instead of exit() for pid tracing Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 41/92] watchdog: f71808e_wdt: indicate WDIOF_CARDRESET support in watchdog_info.options Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 42/92] watchdog: f71808e_wdt: remove use of wrong watchdog_info option Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 43/92] watchdog: f71808e_wdt: clear watchdog timeout occurred flag Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 44/92] pseries: Fix 64 bit logical memory block panic Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 45/92] module: Correctly truncate sysfs sections output Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 46/92] perf intel-pt: Fix FUP packet state Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 47/92] remoteproc: qcom: q6v5: Update running state before requesting stop Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 48/92] drm/imx: imx-ldb: Disable both channels for split mode in enc->disable() Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 49/92] mfd: arizona: Ensure 32k clock is put on driver unbind and error Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 50/92] RDMA/ipoib: Return void from ipoib_ib_dev_stop() Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 51/92] RDMA/ipoib: Fix ABBA deadlock with ipoib_reap_ah() Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 52/92] media: rockchip: rga: Introduce color fmt macros and refactor CSC mode logic Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 53/92] media: rockchip: rga: Only set output CSC mode for RGB input Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 54/92] USB: serial: ftdi_sio: make process-packet buffer unsigned Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 55/92] USB: serial: ftdi_sio: clean up receive processing Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 56/92] USB: serial: ftdi_sio: fix break and sysrq handling Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 57/92] mmc: renesas_sdhi_internal_dmac: clean up the code for dma complete Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 58/92] gpu: ipu-v3: image-convert: Combine rotate/no-rotate irq handlers Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 59/92] dm rq: dont call blk_mq_queue_stopped() in dm_stop_queue() Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 60/92] selftests/powerpc: ptrace-pkey: Rename variables to make it easier to follow code Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 61/92] selftests/powerpc: ptrace-pkey: Update the test to mark an invalid pkey correctly Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 62/92] selftests/powerpc: ptrace-pkey: Dont update expected UAMOR value Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 63/92] iommu/omap: Check for failure of a call to omap_iommu_dump_ctx Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 64/92] iommu/vt-d: Enforce PASID devTLB field mask Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 65/92] i2c: rcar: slave: only send STOP event when we have been addressed Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 66/92] clk: clk-atlas6: fix return value check in atlas6_clk_init() Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 67/92] pwm: bcm-iproc: handle clk_get_rate() return Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 68/92] tools build feature: Use CC and CXX from parent Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 69/92] i2c: rcar: avoid race when unregistering slave Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 70/92] openrisc: Fix oops caused when dumping stack Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 71/92] scsi: lpfc: nvmet: Avoid hang / use-after-free again when destroying targetport Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 72/92] watchdog: initialize device before misc_register Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 73/92] Input: sentelic - fix error return when fsp_reg_write fails Greg Kroah-Hartman
2020-08-20  9:21 ` [PATCH 4.19 74/92] drm/vmwgfx: Use correct vmw_legacy_display_unit pointer Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 75/92] drm/vmwgfx: Fix two list_for_each loop exit tests Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 76/92] net: qcom/emac: add missed clk_disable_unprepare in error path of emac_clks_phase1_init Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 77/92] nfs: Fix getxattr kernel panic and memory overflow Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 78/92] fs/minix: set s_maxbytes correctly Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 79/92] fs/minix: fix block limit check for V1 filesystems Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 80/92] fs/minix: remove expected error message in block_to_path() Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 81/92] fs/ufs: avoid potential u32 multiplication overflow Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 82/92] test_kmod: avoid potential double free in trigger_config_run_type() Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 83/92] mfd: dln2: Run event handler loop under spinlock Greg Kroah-Hartman
2020-08-21  7:21   ` Pavel Machek
2020-08-21  9:06     ` Andy Shevchenko
2020-08-21  9:14       ` Greg Kroah-Hartman
2020-08-21  9:15         ` Greg Kroah-Hartman
2020-08-21 10:54           ` Andy Shevchenko
2020-08-21 11:21             ` Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 84/92] ALSA: echoaudio: Fix potential Oops in snd_echo_resume() Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 85/92] perf bench mem: Always memset source before memcpy Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 86/92] tools build feature: Quote CC and CXX for their arguments Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 87/92] sh: landisk: Add missing initialization of sh_io_port_base Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 88/92] khugepaged: retract_page_tables() remember to test exit Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 89/92] arm64: dts: marvell: espressobin: add ethernet alias Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 90/92] drm/radeon: fix fb_div check in ni_init_smc_spll_table() Greg Kroah-Hartman
2020-08-21  7:27   ` Pavel Machek
2020-08-21  7:37     ` Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 91/92] drm: Added orientation quirk for ASUS tablet model T103HAF Greg Kroah-Hartman
2020-08-20  9:22 ` [PATCH 4.19 92/92] drm/amdgpu: Fix bug where DPM is not enabled after hibernate and resume Greg Kroah-Hartman
2020-08-20 20:03 ` [PATCH 4.19 00/92] 4.19.141-rc1 review Guenter Roeck
2020-08-20 20:05 ` Guenter Roeck
2020-08-20 23:49 ` Shuah Khan
2020-08-21  7:09 ` Naresh Kamboju
2020-08-21  7:39 ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CA+G9fYvdQv2Ukvs-UKiEgYaDdBthsWsY=35cQ4YpvMhA0hU5Gg@mail.gmail.com' \
    --to=naresh.kamboju@linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=songmuchun@bytedance.com \
    --cc=stable@vger.kernel.org \
    --cc=zhouchengming@bytedance.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).