aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-07-18 15:04:58 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-07-22 12:06:00 +0000
commit343f8ef4bca603a6a280812c4c6597825fcc63c5 (patch)
treed213da8d163bfa6e393c711e3ab7960374b6211d /syz-cluster
parentaf30dea9cea0f95c6651fb7ce092f68eedfaec48 (diff)
syz-cluster: remember LKML series tags
Sometimes the patch series directly hint at the kernel tree they should be applied to. Extract and remember this information.
Diffstat (limited to 'syz-cluster')
-rw-r--r--syz-cluster/pkg/api/api.go1
-rw-r--r--syz-cluster/pkg/controller/api_test.go6
-rw-r--r--syz-cluster/pkg/db/entities.go19
-rw-r--r--syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql1
-rw-r--r--syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql1
-rw-r--r--syz-cluster/pkg/service/series.go8
-rw-r--r--syz-cluster/series-tracker/main.go2
7 files changed, 27 insertions, 11 deletions
diff --git a/syz-cluster/pkg/api/api.go b/syz-cluster/pkg/api/api.go
index 128be02ba..5483513af 100644
--- a/syz-cluster/pkg/api/api.go
+++ b/syz-cluster/pkg/api/api.go
@@ -103,6 +103,7 @@ type Series struct {
Cc []string `json:"cc"`
Version int `json:"version"`
Link string `json:"link"`
+ SubjectTags []string `json:"subject_tags"`
PublishedAt time.Time `json:"published_at"`
Patches []SeriesPatch `json:"patches"`
}
diff --git a/syz-cluster/pkg/controller/api_test.go b/syz-cluster/pkg/controller/api_test.go
index 9e709e089..1c1c8de9f 100644
--- a/syz-cluster/pkg/controller/api_test.go
+++ b/syz-cluster/pkg/controller/api_test.go
@@ -5,11 +5,12 @@ package controller
import (
"bytes"
+ "testing"
+ "time"
+
"github.com/google/syzkaller/syz-cluster/pkg/api"
"github.com/google/syzkaller/syz-cluster/pkg/app"
"github.com/stretchr/testify/assert"
- "testing"
- "time"
)
func TestAPIGetSeries(t *testing.T) {
@@ -108,6 +109,7 @@ var testSeries = &api.Series{
Version: 2,
PublishedAt: time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC),
Cc: []string{"email"},
+ SubjectTags: []string{"tag"},
Patches: []api.SeriesPatch{
{
Seq: 1,
diff --git a/syz-cluster/pkg/db/entities.go b/syz-cluster/pkg/db/entities.go
index 77c066b5e..b1ffc6949 100644
--- a/syz-cluster/pkg/db/entities.go
+++ b/syz-cluster/pkg/db/entities.go
@@ -4,18 +4,21 @@
package db
import (
- "cloud.google.com/go/spanner"
"time"
+
+ "cloud.google.com/go/spanner"
)
type Series struct {
- ID string `spanner:"ID"`
- ExtID string `spanner:"ExtID"`
- AuthorName string `spanner:"AuthorName"`
- AuthorEmail string `spanner:"AuthorEmail"`
- Title string `spanner:"Title"`
- Link string `spanner:"Link"`
- Version int64 `spanner:"Version"`
+ ID string `spanner:"ID"`
+ ExtID string `spanner:"ExtID"`
+ AuthorName string `spanner:"AuthorName"`
+ AuthorEmail string `spanner:"AuthorEmail"`
+ Title string `spanner:"Title"`
+ Link string `spanner:"Link"`
+ Version int64 `spanner:"Version"`
+ // In LKML patches, there are often hints at the target tree for the patch.
+ SubjectTags []string `spanner:"SubjectTags"`
PublishedAt time.Time `spanner:"PublishedAt"`
// TODO: we could ger rid of the field by using slightly more complicated SQL queries.
LatestSessionID spanner.NullString `spanner:"LatestSessionID"`
diff --git a/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql
new file mode 100644
index 000000000..d63028aa2
--- /dev/null
+++ b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql
@@ -0,0 +1 @@
+ALTER TABLE Series DROP COLUMN SubjectTags;
diff --git a/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql
new file mode 100644
index 000000000..a049fdde6
--- /dev/null
+++ b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql
@@ -0,0 +1 @@
+ALTER TABLE Series ADD COLUMN SubjectTags ARRAY<STRING(512)>;
diff --git a/syz-cluster/pkg/service/series.go b/syz-cluster/pkg/service/series.go
index 6583306ce..d1ace9b09 100644
--- a/syz-cluster/pkg/service/series.go
+++ b/syz-cluster/pkg/service/series.go
@@ -63,6 +63,13 @@ func (s *SeriesService) UploadSeries(ctx context.Context, series *api.Series) (*
PublishedAt: series.PublishedAt,
Cc: series.Cc,
}
+ for _, tag := range series.SubjectTags {
+ const tageSizeLimit = 511
+ if len(tag) > tageSizeLimit {
+ tag = tag[:tageSizeLimit]
+ }
+ seriesObj.SubjectTags = append(seriesObj.SubjectTags, tag)
+ }
err := s.seriesRepo.Insert(ctx, seriesObj, func() ([]*db.Patch, error) {
var ret []*db.Patch
for _, patch := range series.Patches {
@@ -121,6 +128,7 @@ func (s *SeriesService) getSeries(ctx context.Context,
Cc: series.Cc,
PublishedAt: series.PublishedAt,
Link: series.Link,
+ SubjectTags: series.SubjectTags,
}
for _, patch := range patches {
var body []byte
diff --git a/syz-cluster/series-tracker/main.go b/syz-cluster/series-tracker/main.go
index b8638d897..d6f28a497 100644
--- a/syz-cluster/series-tracker/main.go
+++ b/syz-cluster/series-tracker/main.go
@@ -155,9 +155,9 @@ func (sf *SeriesFetcher) handleSeries(ctx context.Context, series *lore.Series,
apiSeries := &api.Series{
ExtID: series.MessageID,
AuthorEmail: first.Author,
- // TODO: set Cc.
Title: series.Subject,
Version: series.Version,
+ SubjectTags: series.Tags,
Link: "https://lore.kernel.org/all/" + series.MessageID,
PublishedAt: date,
}