From 7ee3f3729011edc355cf089f7823ec8c8f366457 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Wed, 18 Jan 2023 16:43:24 +0100 Subject: pkg/subsystem: move the exiting code to /legacy It will help gradually switch to the new code, once it's fully ready. --- pkg/subsystem/extract.go | 134 ----------------------------------- pkg/subsystem/extract_test.go | 109 ---------------------------- pkg/subsystem/legacy/extract.go | 134 +++++++++++++++++++++++++++++++++++ pkg/subsystem/legacy/extract_test.go | 109 ++++++++++++++++++++++++++++ pkg/subsystem/legacy/maintainers.go | 57 +++++++++++++++ pkg/subsystem/maintainers.go | 57 --------------- 6 files changed, 300 insertions(+), 300 deletions(-) delete mode 100644 pkg/subsystem/extract.go delete mode 100644 pkg/subsystem/extract_test.go create mode 100644 pkg/subsystem/legacy/extract.go create mode 100644 pkg/subsystem/legacy/extract_test.go create mode 100644 pkg/subsystem/legacy/maintainers.go delete mode 100644 pkg/subsystem/maintainers.go (limited to 'pkg/subsystem') diff --git a/pkg/subsystem/extract.go b/pkg/subsystem/extract.go deleted file mode 100644 index 1908f5e54..000000000 --- a/pkg/subsystem/extract.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2022 syzkaller project authors. All rights reserved. -// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. - -package subsystem - -import ( - "regexp" - "sync" - - "github.com/google/syzkaller/prog" -) - -type SubsystemExtractor struct { - pathToSubsystems func(path string) []string - callToSubsystems func(call string) []string -} - -// Crash contains the subset of Crash fields relevant for subsystem extraction. -type Crash struct { - OS string - GuiltyFiles []string - SyzRepro string -} - -func MakeLinuxSubsystemExtractor() *SubsystemExtractor { - return &SubsystemExtractor{ - pathToSubsystems: linuxPathToSubsystems, - callToSubsystems: linuxCallToSubsystems, - } -} - -func (se *SubsystemExtractor) Extract(crash *Crash) []string { - retMap := map[string]bool{} - // Currently we only have the dumbest possible implementation of subsystem detection. - if se.pathToSubsystems != nil { - for _, path := range crash.GuiltyFiles { - for _, value := range se.pathToSubsystems(path) { - retMap[value] = true - } - } - } - if se.callToSubsystems != nil { - callSet, _, _ := prog.CallSet([]byte(crash.SyzRepro)) - for call := range callSet { - for _, subsystem := range se.callToSubsystems(call) { - retMap[subsystem] = true - } - } - } - retSlice := []string{} - for name := range retMap { - retSlice = append(retSlice, name) - } - return retSlice -} - -func linuxPathToSubsystems(path string) []string { - ret := []string{} - if vfsPathRegexp.MatchString(path) { - ret = append(ret, "vfs") - } - linuxSubsystemsOnce.Do(func() { - for name, info := range linuxSubsystems { - linuxSubsystemRegexps[name] = regexp.MustCompile("^/?" + info.path + ".*") - } - }) - for name, pattern := range linuxSubsystemRegexps { - if pattern.MatchString(path) { - ret = append(ret, name) - } - } - return ret -} - -var ( - linuxSubsystemsOnce sync.Once - linuxSubsystemRegexps = map[string]*regexp.Regexp{} -) - -func linuxCallToSubsystems(call string) []string { - name := linuxCallToSubsystemsMap[call] - if name != "" { - return []string{name} - } - return nil -} - -var linuxCallToSubsystemsMap = map[string]string{ - "syz_mount_image$adfs": "adfs", - "syz_mount_image$affs": "affs", - "syz_mount_image$befs": "befs", - "syz_mount_image$bfs": "bfs", - "syz_mount_image$btrfs": "btrfs", - "syz_mount_image$cramfs": "cramfs", - "syz_mount_image$efs": "efs", - "syz_mount_image$erofs": "erofs", - "syz_mount_image$exfat": "exfat", - "syz_mount_image$ext4": "ext4", - "syz_mount_image$f2fs": "f2fs", - "syz_mount_image$gfs2": "gfs2", - "syz_mount_image$gfs2meta": "gfs2", - "syz_mount_image$hfs": "hfs", - "syz_mount_image$hfsplus": "hfsplus", - "syz_mount_image$hpfs": "hpfs", - "syz_mount_image$iso9660": "iso9660", - "syz_mount_image$jffs2": "jffs2", - "syz_mount_image$jfs": "jfs", - "syz_mount_image$minix": "minix", - "syz_mount_image$msdos": "fat", - "syz_mount_image$nilfs2": "nilfs2", - "syz_mount_image$ntfs": "ntfs", - "syz_mount_image$ntfs3": "ntfs3", - "syz_mount_image$ocfs2": "ocfs2", - "syz_mount_image$omfs": "omfs", - "syz_mount_image$qnx4": "qnx4", - "syz_mount_image$qnx6": "qnx6", - "syz_mount_image$reiserfs": "reiserfs", - "syz_mount_image$romfs": "romfs", - "syz_mount_image$squashfs": "squashfs", - "syz_mount_image$sysv": "sysv", - "syz_mount_image$tmpfs": "tmpfs", - "syz_mount_image$ubifs": "ubifs", - "syz_mount_image$udf": "udf", - "syz_mount_image$ufs": "ufs", - "syz_mount_image$v7": "v7", - "syz_mount_image$vfat": "fat", - "syz_mount_image$vxfs": "vxfs", - "syz_mount_image$xfs": "xfs", - "syz_mount_image$zonefs": "zonefs", -} - -var ( - vfsPathRegexp = regexp.MustCompile(`^fs/[^/]+\.c`) -) diff --git a/pkg/subsystem/extract_test.go b/pkg/subsystem/extract_test.go deleted file mode 100644 index eb04ff6ce..000000000 --- a/pkg/subsystem/extract_test.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2022 syzkaller project authors. All rights reserved. -// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. - -package subsystem - -import ( - "sort" - "testing" - - "github.com/google/syzkaller/sys/targets" - "github.com/stretchr/testify/assert" -) - -func TestProgCallRules(t *testing.T) { - se := &SubsystemExtractor{ - pathToSubsystems: linuxPathToSubsystems, - callToSubsystems: func(call string) []string { - ret := map[string][]string{ - // Intentionally add some that are not present in the test below. - "test": {"test"}, - "syz_io_uring_setup": {"io_uring"}, - "ioctl$TIOCSETD": {"tty_ioctls", "tty"}, - // Some calls are also omitted to verify that the code works fine this way. - } - return ret[call] - }, - } - - ret := se.Extract(&Crash{ - OS: targets.Linux, - GuiltyFiles: []string{ - "mm/page-writeback.c", - }, - // nolint: lll - SyzRepro: `# https://syzkaller.appspot.com/bug?id=708185e841adf6ca28fc50b126fdf9825fd8ae43 -# See https://goo.gl/kgGztJ for information about syzkaller reproducers. -#{"repeat":true,"procs":1,"slowdown":1,"sandbox":"","close_fds":false} -r0 = syz_io_uring_setup(0x3ee4, &(0x7f0000000240), &(0x7f0000002000/0x2000)=nil, &(0x7f0000ffd000/0x3000)=nil, &(0x7f0000000100)=0x0, &(0x7f0000000140)=0x0) -socket$inet_udplite(0x2, 0x2, 0x88) -r3 = openat$ptmx(0xffffffffffffff9c, &(0x7f0000000040), 0x8a04, 0x0) -syz_io_uring_submit(r1, r2, &(0x7f0000000000)=@IORING_OP_READ=@pass_buffer={0x16, 0x0, 0x0, @fd_index=0x5, 0x0, 0x0}, 0x0) -ioctl$TIOCSETD(r3, 0x5423, &(0x7f0000000580)=0x3) -io_uring_enter(r0, 0x2ff, 0x0, 0x0, 0x0, 0x0)`, - }) - sort.Strings(ret) - assert.Exactlyf(t, ret, []string{"io_uring", "tty", "tty_ioctls"}, - "invalid resulting subsystems: %s", ret) -} - -func TestFsSubsystemExtraction(t *testing.T) { - extractor := MakeLinuxSubsystemExtractor() - - tests := []struct { - guilty string - prog string - subsystems []string - }{ - { - guilty: "fs/abc.c", - subsystems: []string{"vfs"}, - }, - { - guilty: "fs/nilfs2/dat.c", - // nolint: lll - prog: `syz_mount_image$nilfs2(&(0x7f0000000000), &(0x7f0000000100)='./file0\x00', 0x100000, 0x3b, &(0x7f0000000200)=[{&(0x7f0000011240)="02", 0x1}, {&(0x7f0000012a40)="03000000", 0x4, 0x1}], 0x0, &(0x7f00000131c0), 0x1) -openat$incfs(0xffffffffffffff9c, &(0x7f0000000000)='.pending_reads\x00', 0x4040, 0x0)`, - subsystems: []string{"nilfs2"}, - }, - { - guilty: "fs/namei.c", - // nolint: lll - prog: `syz_mount_image$ntfs3(&(0x7f0000000240), &(0x7f000001f3c0)='./file0\x00', 0xc40, &(0x7f00000005c0)=ANY=[@ANYBLOB="0032"], 0x3, 0x1f398, &(0x7f000003e7c0)="111") -r0 = openat(0xffffffffffffff9c, &(0x7f0000000040)='.\x00', 0x0, 0x0) -mkdirat(r0, &(0x7f0000000180)='./bus\x00', 0x0) -mkdirat(r0, &(0x7f0000000280)='./bus/file0\x00', 0x0) -renameat2(r0, &(0x7f00000004c0)='./file0\x00', r0, &(0x7f0000000500)='./bus/file0/file0\x00', 0x0)`, - subsystems: []string{"ntfs3", "vfs"}, - }, - { - guilty: "fs/ext4/file.c", - // nolint: lll - prog: `syz_mount_image$ntfs3(&(0x7f0000000240), &(0x7f000001f3c0)='./file0\x00', 0xc40, &(0x7f00000005c0)=ANY=[@ANYBLOB="0032"], 0x3, 0x1f398, &(0x7f000003e7c0)="111") -r0 = openat(0xffffffffffffff9c, &(0x7f0000000040)='.\x00', 0x0, 0x0) -mkdirat(r0, &(0x7f0000000180)='./bus\x00', 0x0) -mkdirat(r0, &(0x7f0000000280)='./bus/file0\x00', 0x0) -renameat2(r0, &(0x7f00000004c0)='./file0\x00', r0, &(0x7f0000000500)='./bus/file0/file0\x00', 0x0)`, - subsystems: []string{"ntfs3", "ext4"}, - }, - { - guilty: "fs/gfs2/ops_fstype.c", - subsystems: []string{"gfs2"}, - }, - { - guilty: "net/mac80211/main.c", - subsystems: []string{}, - }, - } - - for i, test := range tests { - ret := extractor.Extract(&Crash{ - OS: targets.Linux, - GuiltyFiles: []string{test.guilty}, - SyzRepro: test.prog, - }) - sort.Strings(ret) - sort.Strings(test.subsystems) - assert.Exactlyf(t, ret, test.subsystems, "#%d: invalid resulting subsystems", i) - } -} diff --git a/pkg/subsystem/legacy/extract.go b/pkg/subsystem/legacy/extract.go new file mode 100644 index 000000000..5c321dc97 --- /dev/null +++ b/pkg/subsystem/legacy/extract.go @@ -0,0 +1,134 @@ +// Copyright 2022 syzkaller project authors. All rights reserved. +// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +package legacy + +import ( + "regexp" + "sync" + + "github.com/google/syzkaller/prog" +) + +type SubsystemExtractor struct { + pathToSubsystems func(path string) []string + callToSubsystems func(call string) []string +} + +// Crash contains the subset of Crash fields relevant for subsystem extraction. +type Crash struct { + OS string + GuiltyFiles []string + SyzRepro string +} + +func MakeLinuxSubsystemExtractor() *SubsystemExtractor { + return &SubsystemExtractor{ + pathToSubsystems: linuxPathToSubsystems, + callToSubsystems: linuxCallToSubsystems, + } +} + +func (se *SubsystemExtractor) Extract(crash *Crash) []string { + retMap := map[string]bool{} + // Currently we only have the dumbest possible implementation of subsystem detection. + if se.pathToSubsystems != nil { + for _, path := range crash.GuiltyFiles { + for _, value := range se.pathToSubsystems(path) { + retMap[value] = true + } + } + } + if se.callToSubsystems != nil { + callSet, _, _ := prog.CallSet([]byte(crash.SyzRepro)) + for call := range callSet { + for _, subsystem := range se.callToSubsystems(call) { + retMap[subsystem] = true + } + } + } + retSlice := []string{} + for name := range retMap { + retSlice = append(retSlice, name) + } + return retSlice +} + +func linuxPathToSubsystems(path string) []string { + ret := []string{} + if vfsPathRegexp.MatchString(path) { + ret = append(ret, "vfs") + } + linuxSubsystemsOnce.Do(func() { + for name, info := range linuxSubsystems { + linuxSubsystemRegexps[name] = regexp.MustCompile("^/?" + info.path + ".*") + } + }) + for name, pattern := range linuxSubsystemRegexps { + if pattern.MatchString(path) { + ret = append(ret, name) + } + } + return ret +} + +var ( + linuxSubsystemsOnce sync.Once + linuxSubsystemRegexps = map[string]*regexp.Regexp{} +) + +func linuxCallToSubsystems(call string) []string { + name := linuxCallToSubsystemsMap[call] + if name != "" { + return []string{name} + } + return nil +} + +var linuxCallToSubsystemsMap = map[string]string{ + "syz_mount_image$adfs": "adfs", + "syz_mount_image$affs": "affs", + "syz_mount_image$befs": "befs", + "syz_mount_image$bfs": "bfs", + "syz_mount_image$btrfs": "btrfs", + "syz_mount_image$cramfs": "cramfs", + "syz_mount_image$efs": "efs", + "syz_mount_image$erofs": "erofs", + "syz_mount_image$exfat": "exfat", + "syz_mount_image$ext4": "ext4", + "syz_mount_image$f2fs": "f2fs", + "syz_mount_image$gfs2": "gfs2", + "syz_mount_image$gfs2meta": "gfs2", + "syz_mount_image$hfs": "hfs", + "syz_mount_image$hfsplus": "hfsplus", + "syz_mount_image$hpfs": "hpfs", + "syz_mount_image$iso9660": "iso9660", + "syz_mount_image$jffs2": "jffs2", + "syz_mount_image$jfs": "jfs", + "syz_mount_image$minix": "minix", + "syz_mount_image$msdos": "fat", + "syz_mount_image$nilfs2": "nilfs2", + "syz_mount_image$ntfs": "ntfs", + "syz_mount_image$ntfs3": "ntfs3", + "syz_mount_image$ocfs2": "ocfs2", + "syz_mount_image$omfs": "omfs", + "syz_mount_image$qnx4": "qnx4", + "syz_mount_image$qnx6": "qnx6", + "syz_mount_image$reiserfs": "reiserfs", + "syz_mount_image$romfs": "romfs", + "syz_mount_image$squashfs": "squashfs", + "syz_mount_image$sysv": "sysv", + "syz_mount_image$tmpfs": "tmpfs", + "syz_mount_image$ubifs": "ubifs", + "syz_mount_image$udf": "udf", + "syz_mount_image$ufs": "ufs", + "syz_mount_image$v7": "v7", + "syz_mount_image$vfat": "fat", + "syz_mount_image$vxfs": "vxfs", + "syz_mount_image$xfs": "xfs", + "syz_mount_image$zonefs": "zonefs", +} + +var ( + vfsPathRegexp = regexp.MustCompile(`^fs/[^/]+\.c`) +) diff --git a/pkg/subsystem/legacy/extract_test.go b/pkg/subsystem/legacy/extract_test.go new file mode 100644 index 000000000..d23ec11e2 --- /dev/null +++ b/pkg/subsystem/legacy/extract_test.go @@ -0,0 +1,109 @@ +// Copyright 2022 syzkaller project authors. All rights reserved. +// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +package legacy + +import ( + "sort" + "testing" + + "github.com/google/syzkaller/sys/targets" + "github.com/stretchr/testify/assert" +) + +func TestProgCallRules(t *testing.T) { + se := &SubsystemExtractor{ + pathToSubsystems: linuxPathToSubsystems, + callToSubsystems: func(call string) []string { + ret := map[string][]string{ + // Intentionally add some that are not present in the test below. + "test": {"test"}, + "syz_io_uring_setup": {"io_uring"}, + "ioctl$TIOCSETD": {"tty_ioctls", "tty"}, + // Some calls are also omitted to verify that the code works fine this way. + } + return ret[call] + }, + } + + ret := se.Extract(&Crash{ + OS: targets.Linux, + GuiltyFiles: []string{ + "mm/page-writeback.c", + }, + // nolint: lll + SyzRepro: `# https://syzkaller.appspot.com/bug?id=708185e841adf6ca28fc50b126fdf9825fd8ae43 +# See https://goo.gl/kgGztJ for information about syzkaller reproducers. +#{"repeat":true,"procs":1,"slowdown":1,"sandbox":"","close_fds":false} +r0 = syz_io_uring_setup(0x3ee4, &(0x7f0000000240), &(0x7f0000002000/0x2000)=nil, &(0x7f0000ffd000/0x3000)=nil, &(0x7f0000000100)=0x0, &(0x7f0000000140)=0x0) +socket$inet_udplite(0x2, 0x2, 0x88) +r3 = openat$ptmx(0xffffffffffffff9c, &(0x7f0000000040), 0x8a04, 0x0) +syz_io_uring_submit(r1, r2, &(0x7f0000000000)=@IORING_OP_READ=@pass_buffer={0x16, 0x0, 0x0, @fd_index=0x5, 0x0, 0x0}, 0x0) +ioctl$TIOCSETD(r3, 0x5423, &(0x7f0000000580)=0x3) +io_uring_enter(r0, 0x2ff, 0x0, 0x0, 0x0, 0x0)`, + }) + sort.Strings(ret) + assert.Exactlyf(t, ret, []string{"io_uring", "tty", "tty_ioctls"}, + "invalid resulting subsystems: %s", ret) +} + +func TestFsSubsystemExtraction(t *testing.T) { + extractor := MakeLinuxSubsystemExtractor() + + tests := []struct { + guilty string + prog string + subsystems []string + }{ + { + guilty: "fs/abc.c", + subsystems: []string{"vfs"}, + }, + { + guilty: "fs/nilfs2/dat.c", + // nolint: lll + prog: `syz_mount_image$nilfs2(&(0x7f0000000000), &(0x7f0000000100)='./file0\x00', 0x100000, 0x3b, &(0x7f0000000200)=[{&(0x7f0000011240)="02", 0x1}, {&(0x7f0000012a40)="03000000", 0x4, 0x1}], 0x0, &(0x7f00000131c0), 0x1) +openat$incfs(0xffffffffffffff9c, &(0x7f0000000000)='.pending_reads\x00', 0x4040, 0x0)`, + subsystems: []string{"nilfs2"}, + }, + { + guilty: "fs/namei.c", + // nolint: lll + prog: `syz_mount_image$ntfs3(&(0x7f0000000240), &(0x7f000001f3c0)='./file0\x00', 0xc40, &(0x7f00000005c0)=ANY=[@ANYBLOB="0032"], 0x3, 0x1f398, &(0x7f000003e7c0)="111") +r0 = openat(0xffffffffffffff9c, &(0x7f0000000040)='.\x00', 0x0, 0x0) +mkdirat(r0, &(0x7f0000000180)='./bus\x00', 0x0) +mkdirat(r0, &(0x7f0000000280)='./bus/file0\x00', 0x0) +renameat2(r0, &(0x7f00000004c0)='./file0\x00', r0, &(0x7f0000000500)='./bus/file0/file0\x00', 0x0)`, + subsystems: []string{"ntfs3", "vfs"}, + }, + { + guilty: "fs/ext4/file.c", + // nolint: lll + prog: `syz_mount_image$ntfs3(&(0x7f0000000240), &(0x7f000001f3c0)='./file0\x00', 0xc40, &(0x7f00000005c0)=ANY=[@ANYBLOB="0032"], 0x3, 0x1f398, &(0x7f000003e7c0)="111") +r0 = openat(0xffffffffffffff9c, &(0x7f0000000040)='.\x00', 0x0, 0x0) +mkdirat(r0, &(0x7f0000000180)='./bus\x00', 0x0) +mkdirat(r0, &(0x7f0000000280)='./bus/file0\x00', 0x0) +renameat2(r0, &(0x7f00000004c0)='./file0\x00', r0, &(0x7f0000000500)='./bus/file0/file0\x00', 0x0)`, + subsystems: []string{"ntfs3", "ext4"}, + }, + { + guilty: "fs/gfs2/ops_fstype.c", + subsystems: []string{"gfs2"}, + }, + { + guilty: "net/mac80211/main.c", + subsystems: []string{}, + }, + } + + for i, test := range tests { + ret := extractor.Extract(&Crash{ + OS: targets.Linux, + GuiltyFiles: []string{test.guilty}, + SyzRepro: test.prog, + }) + sort.Strings(ret) + sort.Strings(test.subsystems) + assert.Exactlyf(t, ret, test.subsystems, "#%d: invalid resulting subsystems", i) + } +} diff --git a/pkg/subsystem/legacy/maintainers.go b/pkg/subsystem/legacy/maintainers.go new file mode 100644 index 000000000..948c2d851 --- /dev/null +++ b/pkg/subsystem/legacy/maintainers.go @@ -0,0 +1,57 @@ +// Copyright 2022 syzkaller project authors. All rights reserved. +// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +package legacy + +func LinuxGetMaintainers(subsystemName string) []string { + return linuxSubsystems[subsystemName].cc +} + +type linuxSubsystemInfo struct { + path string + cc []string +} + +// These are taken from Linux v6.1. There will be no need to store them here once we +// begin to automatically parse the MAINTAINERS file. + +// nolint:lll +var linuxSubsystems = map[string]linuxSubsystemInfo{ + "adfs": {path: "fs/adfs/", cc: []string{}}, + "affs": {path: "fs/affs/", cc: []string{"linux-fsdevel@vger.kernel.org", "dsterba@suse.com"}}, + "befs": {path: "fs/befs/", cc: []string{"luisbg@kernel.org", "salah.triki@gmail.com"}}, + "bfs": {path: "fs/bfs/", cc: []string{"aivazian.tigran@gmail.com"}}, + "btrfs": {path: "fs/btrfs/", cc: []string{"josef@toxicpanda.com", "dsterba@suse.com", "linux-btrfs@vger.kernel.org", "clm@fb.com"}}, + "cramfs": {path: "fs/cramfs/", cc: []string{"nico@fluxnic.net"}}, + "efs": {path: "fs/efs/", cc: []string{}}, + "erofs": {path: "fs/erofs/", cc: []string{"xiang@kernel.org", "chao@kernel.org", "linux-erofs@lists.ozlabs.org"}}, + "exfat": {path: "fs/exfat/", cc: []string{"linkinjeon@kernel.org", "sj1557.seo@samsung.com", "linux-fsdevel@vger.kernel.org"}}, + "fat": {path: "fs/fat/", cc: []string{"hirofumi@mail.parknet.co.jp"}}, + "ext4": {path: "fs/ext4/", cc: []string{"linux-ext4@vger.kernel.org", "tytso@mit.edu", "adilger.kernel@dilger.ca"}}, + "f2fs": {path: "fs/f2fs/", cc: []string{"linux-f2fs-devel@lists.sourceforge.net", "jaegeuk@kernel.org", "chao@kernel.org"}}, + "gfs2": {path: "fs/gfs2/", cc: []string{"cluster-devel@redhat.com", "rpeterso@redhat.com", "agruenba@redhat.com"}}, + "hfs": {path: "fs/hfs/", cc: []string{"linux-fsdevel@vger.kernel.org"}}, + "hfsplus": {path: "fs/hfsplus/", cc: []string{"linux-fsdevel@vger.kernel.org"}}, + "hpfs": {path: "fs/hpfs/", cc: []string{"mikulas@artax.karlin.mff.cuni.cz"}}, + "iso9660": {path: "fs/isofs/", cc: []string{}}, + "jffs2": {path: "fs/jffs2/", cc: []string{"linux-mtd@lists.infradead.org", "dwmw2@infradead.org", "richard@nod.at"}}, + "jfs": {path: "fs/jfs/", cc: []string{"jfs-discussion@lists.sourceforge.net", "shaggy@kernel.org"}}, + "minix": {path: "fs/minix/", cc: []string{}}, + "nilfs2": {path: "fs/nilfs2/", cc: []string{"linux-nilfs@vger.kernel.org", "konishi.ryusuke@gmail.com"}}, + "ntfs": {path: "fs/ntfs/", cc: []string{"linux-ntfs-dev@lists.sourceforge.net", "anton@tuxera.com"}}, + "ntfs3": {path: "fs/ntfs3/", cc: []string{"ntfs3@lists.linux.dev", "almaz.alexandrovich@paragon-software.com"}}, + "ocfs2": {path: "fs/ocfs2/", cc: []string{"ocfs2-devel@oss.oracle.com", "mark@fasheh.com", "jlbec@evilplan.org", "joseph.qi@linux.alibaba.com"}}, + "omfs": {path: "fs/omfs/", cc: []string{"linux-karma-devel@lists.sourceforge.net", "me@bobcopeland.com"}}, + "qnx4": {path: "fs/qnx4/", cc: []string{"al@alarsen.net"}}, + "qnx6": {path: "fs/qnx6/", cc: []string{}}, + "reiserfs": {path: "fs/reiserfs/", cc: []string{"reiserfs-devel@vger.kernel.org"}}, + "romfs": {path: "fs/romfs/", cc: []string{}}, + "squashfs": {path: "fs/squashfs/", cc: []string{"phillip@squashfs.org.uk", "squashfs-devel@lists.sourceforge.net"}}, + "sysv": {path: "fs/sysv/", cc: []string{"hch@infradead.org"}}, + "tmpfs": {path: "mm/shmem.c", cc: []string{"linux-mm@kvack.org", "akpm@linux-foundation.org", "hughd@google.com"}}, + "ubifs": {path: "fs/ubifs/", cc: []string{"linux-mtd@lists.infradead.org", "richard@nod.at"}}, + "udf": {path: "fs/udf/", cc: []string{"jack@suse.com"}}, + "ufs": {path: "fs/ufs/", cc: []string{"dushistov@mail.ru"}}, + "vxfs": {path: "fs/freevxfs/", cc: []string{"hch@infradead.org"}}, + "xfs": {path: "fs/xfs/", cc: []string{"linux-xfs@vger.kernel.org", "djwong@kernel.org"}}, + "zonefs": {path: "fs/zonefs/", cc: []string{"linux-fsdevel@vger.kernel.org", "damien.lemoal@opensource.wdc.com", "naohiro.aota@wdc.com"}}} diff --git a/pkg/subsystem/maintainers.go b/pkg/subsystem/maintainers.go deleted file mode 100644 index f44e6550b..000000000 --- a/pkg/subsystem/maintainers.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2022 syzkaller project authors. All rights reserved. -// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. - -package subsystem - -func LinuxGetMaintainers(subsystemName string) []string { - return linuxSubsystems[subsystemName].cc -} - -type linuxSubsystemInfo struct { - path string - cc []string -} - -// These are taken from Linux v6.1. There will be no need to store them here once we -// begin to automatically parse the MAINTAINERS file. - -// nolint:lll -var linuxSubsystems = map[string]linuxSubsystemInfo{ - "adfs": {path: "fs/adfs/", cc: []string{}}, - "affs": {path: "fs/affs/", cc: []string{"linux-fsdevel@vger.kernel.org", "dsterba@suse.com"}}, - "befs": {path: "fs/befs/", cc: []string{"luisbg@kernel.org", "salah.triki@gmail.com"}}, - "bfs": {path: "fs/bfs/", cc: []string{"aivazian.tigran@gmail.com"}}, - "btrfs": {path: "fs/btrfs/", cc: []string{"josef@toxicpanda.com", "dsterba@suse.com", "linux-btrfs@vger.kernel.org", "clm@fb.com"}}, - "cramfs": {path: "fs/cramfs/", cc: []string{"nico@fluxnic.net"}}, - "efs": {path: "fs/efs/", cc: []string{}}, - "erofs": {path: "fs/erofs/", cc: []string{"xiang@kernel.org", "chao@kernel.org", "linux-erofs@lists.ozlabs.org"}}, - "exfat": {path: "fs/exfat/", cc: []string{"linkinjeon@kernel.org", "sj1557.seo@samsung.com", "linux-fsdevel@vger.kernel.org"}}, - "fat": {path: "fs/fat/", cc: []string{"hirofumi@mail.parknet.co.jp"}}, - "ext4": {path: "fs/ext4/", cc: []string{"linux-ext4@vger.kernel.org", "tytso@mit.edu", "adilger.kernel@dilger.ca"}}, - "f2fs": {path: "fs/f2fs/", cc: []string{"linux-f2fs-devel@lists.sourceforge.net", "jaegeuk@kernel.org", "chao@kernel.org"}}, - "gfs2": {path: "fs/gfs2/", cc: []string{"cluster-devel@redhat.com", "rpeterso@redhat.com", "agruenba@redhat.com"}}, - "hfs": {path: "fs/hfs/", cc: []string{"linux-fsdevel@vger.kernel.org"}}, - "hfsplus": {path: "fs/hfsplus/", cc: []string{"linux-fsdevel@vger.kernel.org"}}, - "hpfs": {path: "fs/hpfs/", cc: []string{"mikulas@artax.karlin.mff.cuni.cz"}}, - "iso9660": {path: "fs/isofs/", cc: []string{}}, - "jffs2": {path: "fs/jffs2/", cc: []string{"linux-mtd@lists.infradead.org", "dwmw2@infradead.org", "richard@nod.at"}}, - "jfs": {path: "fs/jfs/", cc: []string{"jfs-discussion@lists.sourceforge.net", "shaggy@kernel.org"}}, - "minix": {path: "fs/minix/", cc: []string{}}, - "nilfs2": {path: "fs/nilfs2/", cc: []string{"linux-nilfs@vger.kernel.org", "konishi.ryusuke@gmail.com"}}, - "ntfs": {path: "fs/ntfs/", cc: []string{"linux-ntfs-dev@lists.sourceforge.net", "anton@tuxera.com"}}, - "ntfs3": {path: "fs/ntfs3/", cc: []string{"ntfs3@lists.linux.dev", "almaz.alexandrovich@paragon-software.com"}}, - "ocfs2": {path: "fs/ocfs2/", cc: []string{"ocfs2-devel@oss.oracle.com", "mark@fasheh.com", "jlbec@evilplan.org", "joseph.qi@linux.alibaba.com"}}, - "omfs": {path: "fs/omfs/", cc: []string{"linux-karma-devel@lists.sourceforge.net", "me@bobcopeland.com"}}, - "qnx4": {path: "fs/qnx4/", cc: []string{"al@alarsen.net"}}, - "qnx6": {path: "fs/qnx6/", cc: []string{}}, - "reiserfs": {path: "fs/reiserfs/", cc: []string{"reiserfs-devel@vger.kernel.org"}}, - "romfs": {path: "fs/romfs/", cc: []string{}}, - "squashfs": {path: "fs/squashfs/", cc: []string{"phillip@squashfs.org.uk", "squashfs-devel@lists.sourceforge.net"}}, - "sysv": {path: "fs/sysv/", cc: []string{"hch@infradead.org"}}, - "tmpfs": {path: "mm/shmem.c", cc: []string{"linux-mm@kvack.org", "akpm@linux-foundation.org", "hughd@google.com"}}, - "ubifs": {path: "fs/ubifs/", cc: []string{"linux-mtd@lists.infradead.org", "richard@nod.at"}}, - "udf": {path: "fs/udf/", cc: []string{"jack@suse.com"}}, - "ufs": {path: "fs/ufs/", cc: []string{"dushistov@mail.ru"}}, - "vxfs": {path: "fs/freevxfs/", cc: []string{"hch@infradead.org"}}, - "xfs": {path: "fs/xfs/", cc: []string{"linux-xfs@vger.kernel.org", "djwong@kernel.org"}}, - "zonefs": {path: "fs/zonefs/", cc: []string{"linux-fsdevel@vger.kernel.org", "damien.lemoal@opensource.wdc.com", "naohiro.aota@wdc.com"}}} -- cgit mrf-deployment