diff mbox series

hugetlbfs: check dir in trace_hugetlbfs_alloc_inode

Message ID 20250113030702.58502-1-zhuxiaohui.400@bytedance.com (mailing list archive)
State New
Headers show
Series hugetlbfs: check dir in trace_hugetlbfs_alloc_inode | expand

Commit Message

zhuxiaohui Jan. 13, 2025, 3:07 a.m. UTC
From: Xiaohui Zhu <zhuxiaohui.400@bytedance.com>

Anonymous huge page has no corresponding directory inode,
which cause a null pointer crash when access dir with the stack

  trace_hugetlbfs_alloc_inode
  hugetlbfs_get_inode
  hugetlb_file_setup
  ksys_mmap_pgoff

Signed-off-by: Xiaohui Zhu <zhuxiaohui.400@bytedance.com>
---
 include/trace/events/hugetlbfs.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Hongbo Li Jan. 13, 2025, 3:29 a.m. UTC | #1
On 2025/1/13 11:07, zhuxiaohui wrote:
> From: Xiaohui Zhu <zhuxiaohui.400@bytedance.com>
> 
> Anonymous huge page has no corresponding directory inode,
> which cause a null pointer crash when access dir with the stack
> 
>    trace_hugetlbfs_alloc_inode
>    hugetlbfs_get_inode
>    hugetlb_file_setup
>    ksys_mmap_pgoff
> 
> Signed-off-by: Xiaohui Zhu <zhuxiaohui.400@bytedance.com>
> ---
>   include/trace/events/hugetlbfs.h | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/include/trace/events/hugetlbfs.h b/include/trace/events/hugetlbfs.h
> index 8331c904a9ba..5daa52053edc 100644
> --- a/include/trace/events/hugetlbfs.h
> +++ b/include/trace/events/hugetlbfs.h
> @@ -23,7 +23,9 @@ TRACE_EVENT(hugetlbfs_alloc_inode,
>   	TP_fast_assign(
>   		__entry->dev		= inode->i_sb->s_dev;
>   		__entry->ino		= inode->i_ino;
> -		__entry->dir		= dir->i_ino;
> +		__entry->dir		= 0;
> +		if (dir)
> +			__entry->dir	= dir->i_ino;
It has been fixed in [1] by Muchun.
Thanks,
Hongbo

[1] 
https://lore.kernel.org/lkml/20250106033118.4640-1-songmuchun@bytedance.com/T/
>   		__entry->mode		= mode;
>   	),
>
朱晓辉 Jan. 13, 2025, 3:30 a.m. UTC | #2
Got it, thanks

> From: "Hongbo Li"<lihongbo22@huawei.com>
> Date:  Mon, Jan 13, 2025, 11:29
> Subject:  [External] Re: [PATCH] hugetlbfs: check dir in trace_hugetlbfs_alloc_inode
> To: "zhuxiaohui"<zhuxiaohui400@gmail.com>, <muchun.song@linux.dev>, <rostedt@goodmis.org>, <mhiramat@kernel.org>, <linux-mm@kvack.org>, <linux-kernel@vger.kernel.org>, <linux-trace-kernel@vger.kernel.org>
> Cc: "Xiaohui Zhu"<zhuxiaohui.400@bytedance.com>
> On 2025/1/13 11:07, zhuxiaohui wrote:

> > From: Xiaohui Zhu <zhuxiaohui.400@bytedance.com>

> > 

> > Anonymous huge page has no corresponding directory inode,

> > which cause a null pointer crash when access dir with the stack

> > 

> >    trace_hugetlbfs_alloc_inode

> >    hugetlbfs_get_inode

> >    hugetlb_file_setup

> >    ksys_mmap_pgoff

> > 

> > Signed-off-by: Xiaohui Zhu <zhuxiaohui.400@bytedance.com>

> > ---

> >   include/trace/events/hugetlbfs.h | 4 +++-

> >   1 file changed, 3 insertions(+), 1 deletion(-)

> > 

> > diff --git a/include/trace/events/hugetlbfs.h b/include/trace/events/hugetlbfs.h

> > index 8331c904a9ba..5daa52053edc 100644

> > --- a/include/trace/events/hugetlbfs.h

> > +++ b/include/trace/events/hugetlbfs.h

> > @@ -23,7 +23,9 @@ TRACE_EVENT(hugetlbfs_alloc_inode,

> >           TP_fast_assign(

> >                   __entry->dev                = inode->i_sb->s_dev;

> >                   __entry->ino                = inode->i_ino;

> > -                __entry->dir                = dir->i_ino;

> > +                __entry->dir                = 0;

> > +                if (dir)

> > +                        __entry->dir        = dir->i_ino;

> It has been fixed in [1] by Muchun.

> Thanks,

> Hongbo

> [1] 

> https://lore.kernel.org/lkml/20250106033118.4640-1-songmuchun@bytedance.com/T/

> >                   __entry->mode                = mode;

> >           ),

> >
>
diff mbox series

Patch

diff --git a/include/trace/events/hugetlbfs.h b/include/trace/events/hugetlbfs.h
index 8331c904a9ba..5daa52053edc 100644
--- a/include/trace/events/hugetlbfs.h
+++ b/include/trace/events/hugetlbfs.h
@@ -23,7 +23,9 @@  TRACE_EVENT(hugetlbfs_alloc_inode,
 	TP_fast_assign(
 		__entry->dev		= inode->i_sb->s_dev;
 		__entry->ino		= inode->i_ino;
-		__entry->dir		= dir->i_ino;
+		__entry->dir		= 0;
+		if (dir)
+			__entry->dir	= dir->i_ino;
 		__entry->mode		= mode;
 	),