Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc2024e8

Browse files
committed
kexec,linux,arm64: test empty memmap
Signed-off-by: Chris Koch <chrisko@google.com>
1 parent597d657 commitc2024e8

File tree

4 files changed

+36
-4
lines changed

4 files changed

+36
-4
lines changed

‎pkg/boot/linux/load_linux_image.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ func sanitizeFDT(fdt *dt.FDT) (*dt.Node, error) {
5252
returnchosen,nil
5353
}
5454

55+
varErrMemmapEmpty=errors.New("memory map is empty or contains no information about system RAM")
56+
5557
funckexecLoadImage(kernel,ramfs*os.File,cmdlinestring,dtb io.ReaderAt) (*kimage,error) {
5658
fdt,err:=dt.LoadFDT(dtb)
5759
iferr!=nil {
@@ -63,9 +65,12 @@ func kexecLoadImage(kernel, ramfs *os.File, cmdline string, dtb io.ReaderAt) (*k
6365
Debug("Try parsing memory map...")
6466
mm,err:=kexec.MemoryMapFromFDT(fdt)
6567
iferr!=nil {
66-
returnnil,fmt.Errorf("MemoryMapFromFDT(%v): %v",fdt,err)
68+
returnnil,fmt.Errorf("MemoryMapFromFDT(%v): %w",fdt,err)
6769
}
6870
Debug("Mem map:\n%+v",mm)
71+
iflen(mm.RAM())==0 {
72+
returnnil,ErrMemmapEmpty
73+
}
6974
returnkexecLoadImageMM(mm,kernel,ramfs,fdt,cmdline)
7075
}
7176

‎pkg/boot/linux/load_linux_image_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,33 @@ func TestKexecLoadImage(t *testing.T) {
314314
fdt:closedFile(t),
315315
errs: []error{dt.ErrNoValidReaders},
316316
},
317+
{
318+
name:"invalid-memmap",
319+
kernel:openFile(t,"../image/testdata/Image"),
320+
ramfs:createFile(t, []byte("ramfs")),
321+
fdt:fdtReader(t,&dt.FDT{RootNode:dt.NewNode("/",dt.WithChildren(
322+
dt.NewNode("chosen"),
323+
dt.NewNode("test memory",dt.WithProperty(
324+
dt.PropertyString("device_type","memory"),
325+
// Too short.
326+
dt.Property{Name:"reg",Value: []byte{0x0}},
327+
)),
328+
))}),
329+
errs: []error{dt.ErrPropertyRegionInvalid},
330+
},
331+
{
332+
name:"no-memmap",
333+
kernel:openFile(t,"../image/testdata/Image"),
334+
fdt:fdtReader(t,&dt.FDT{RootNode:dt.NewNode("/",
335+
dt.WithChildren(
336+
dt.NewNode("chosen",dt.WithProperty(
337+
dt.PropertyU64("linux,initrd-start",500),
338+
dt.PropertyU64("linux,initrd-end",500),
339+
)),
340+
),
341+
)}),
342+
errs: []error{ErrMemmapEmpty},
343+
},
317344
} {
318345
t.Run(tt.name,func(t*testing.T) {
319346
got,err:=kexecLoadImage(tt.kernel,tt.ramfs,tt.cmdline,tt.fdt)

‎pkg/dt/node.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ var StandardPropertyTypes = map[string]PropertyType{
5050

5151
var (
5252
errInvalidChildIndex=errors.New("invalid child index")
53-
errPropertyRegionInvalid=errors.New("property value is not <u64x2>")
53+
ErrPropertyRegionInvalid=errors.New("property value is not <u64x2>")
5454
)
5555

5656
// Node is one Node in the Device Tree.
@@ -357,7 +357,7 @@ type Region struct {
357357
// AsRegion converts the property to a Region.
358358
func (p*Property)AsRegion() (*Region,error) {
359359
iflen(p.Value)!=16 {
360-
returnnil,errPropertyRegionInvalid
360+
returnnil,ErrPropertyRegionInvalid
361361
}
362362
varstart,sizeuint64
363363
b:=bytes.NewBuffer(p.Value)

‎pkg/dt/node_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ func TestAsRegion(t *testing.T) {
433433
Value: []byte{},
434434
},
435435
want:&Region{},
436-
wantErr:errPropertyRegionInvalid,
436+
wantErr:ErrPropertyRegionInvalid,
437437
},
438438
{
439439
name:"read start and size, success",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp