aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-01-18 11:57:23 +0100
committerDmitry Vyukov <dvyukov@google.com>2017-01-18 19:58:12 +0100
commit4f62bc36e50bc4a35469af8bee7f71ee3c4f3fe2 (patch)
treecb9c4ff2061da5b332ea0826953c508953f01cbf
parent19a21e679516a5fbce2546fd904dd2412f86f6a6 (diff)
sys: improve sockaddr_un description
1. Embed real filename. 2. Use proc type for unique identifiers.
-rw-r--r--prog/rand.go13
-rw-r--r--sys/socket.txt11
2 files changed, 14 insertions, 10 deletions
diff --git a/prog/rand.go b/prog/rand.go
index 7289e2969..77add6615 100644
--- a/prog/rand.go
+++ b/prog/rand.go
@@ -661,8 +661,17 @@ func (r *randGen) generateArg(s *state, typ sys.Type) (arg *Arg, calls []*Call)
data := r.randString(s, a.Values, a.Dir())
return dataArg(a, data), nil
case sys.BufferFilename:
- filename := r.filename(s)
- return dataArg(a, []byte(filename)), nil
+ var data []byte
+ if a.Dir() == sys.DirOut {
+ r.choose(
+ 10, func() { data = make([]byte, r.Intn(100)) },
+ 10, func() { data = make([]byte, r.Intn(108)) }, // UNIX_PATH_MAX
+ 10, func() { data = make([]byte, r.Intn(4096)) }, // PATH_MAX
+ )
+ } else {
+ data = []byte(r.filename(s))
+ }
+ return dataArg(a, data), nil
case sys.BufferText:
return dataArg(a, r.generateText(a.Text)), nil
default:
diff --git a/sys/socket.txt b/sys/socket.txt
index 7c17497f4..4ac9e4b27 100644
--- a/sys/socket.txt
+++ b/sys/socket.txt
@@ -225,18 +225,13 @@ sockaddr_un [
sockaddr_un_file {
family flags[unix_socket_family, int16]
-# TODO: this must be an embeded file name (currently filename implies indirection).
- path array[int8]
-}
+ path filename
+} [packed]
sockaddr_un_abstract {
family flags[unix_socket_family, int16]
ind const[0, int8]
-# To ensure isolation.
-# This does not work: prog tries to use output sockaddr_un to create pid's.
-# But since it is in a union, the call does not always creates the resource.
-# pid pid
- id int32
+ id proc[int32, 20000, 4]
}
msghdr_un {