From 07cfd161679c3c82a0ecc6e5faaefd6be26e3ab0 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 12 Nov 2016 12:00:38 -0800 Subject: prog: fix validation of len arguments We generate output len arguments, so don't crash on that. --- prog/validation.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/prog/validation.go b/prog/validation.go index 701d0ce3d..6d84073ba 100644 --- a/prog/validation.go +++ b/prog/validation.go @@ -56,7 +56,12 @@ func (c *Call) validate(ctx *validCtx) error { } if arg.Type.Dir() == sys.DirOut { if arg.Val != 0 || arg.AddrPage != 0 || arg.AddrOffset != 0 { - return fmt.Errorf("syscall %v: output arg '%v' has data", c.Meta.Name, typ.Name()) + // We generate output len arguments, which makes sense + // since it can be a length of a variable-length array + // which is not known otherwise. + if _, ok := arg.Type.(*sys.LenType); !ok { + return fmt.Errorf("syscall %v: output arg '%v' has data", c.Meta.Name, typ.Name()) + } } for _, v := range arg.Data { if v != 0 { -- cgit mrf-deployment