diff --git a/pkg/sentry/mm/mm.go b/pkg/sentry/mm/mm.go index fb3867d5c..c84727d6c 100644 --- a/pkg/sentry/mm/mm.go +++ b/pkg/sentry/mm/mm.go @@ -325,94 +325,6 @@ type vma struct { lastFault uintptr } -const ( - vmaRealPermsRead = 1 << iota - vmaRealPermsWrite - vmaRealPermsExecute - vmaEffectivePermsRead - vmaEffectivePermsWrite - vmaEffectivePermsExecute - vmaMaxPermsRead - vmaMaxPermsWrite - vmaMaxPermsExecute - vmaPrivate - vmaGrowsDown -) - -func (v *vma) saveRealPerms() int { - var b int - if v.realPerms.Read { - b |= vmaRealPermsRead - } - if v.realPerms.Write { - b |= vmaRealPermsWrite - } - if v.realPerms.Execute { - b |= vmaRealPermsExecute - } - if v.effectivePerms.Read { - b |= vmaEffectivePermsRead - } - if v.effectivePerms.Write { - b |= vmaEffectivePermsWrite - } - if v.effectivePerms.Execute { - b |= vmaEffectivePermsExecute - } - if v.maxPerms.Read { - b |= vmaMaxPermsRead - } - if v.maxPerms.Write { - b |= vmaMaxPermsWrite - } - if v.maxPerms.Execute { - b |= vmaMaxPermsExecute - } - if v.private { - b |= vmaPrivate - } - if v.growsDown { - b |= vmaGrowsDown - } - return b -} - -func (v *vma) loadRealPerms(b int) { - if b&vmaRealPermsRead > 0 { - v.realPerms.Read = true - } - if b&vmaRealPermsWrite > 0 { - v.realPerms.Write = true - } - if b&vmaRealPermsExecute > 0 { - v.realPerms.Execute = true - } - if b&vmaEffectivePermsRead > 0 { - v.effectivePerms.Read = true - } - if b&vmaEffectivePermsWrite > 0 { - v.effectivePerms.Write = true - } - if b&vmaEffectivePermsExecute > 0 { - v.effectivePerms.Execute = true - } - if b&vmaMaxPermsRead > 0 { - v.maxPerms.Read = true - } - if b&vmaMaxPermsWrite > 0 { - v.maxPerms.Write = true - } - if b&vmaMaxPermsExecute > 0 { - v.maxPerms.Execute = true - } - if b&vmaPrivate > 0 { - v.private = true - } - if b&vmaGrowsDown > 0 { - v.growsDown = true - } -} - func (v *vma) copy() vma { return vma{ mappable: v.mappable, diff --git a/pkg/sentry/mm/save_restore.go b/pkg/sentry/mm/save_restore.go index f56215d9a..fee9d03a5 100644 --- a/pkg/sentry/mm/save_restore.go +++ b/pkg/sentry/mm/save_restore.go @@ -55,3 +55,91 @@ func (mm *MemoryManager) afterLoad() { pseg.ValuePtr().file = mf } } + +const ( + vmaRealPermsRead = 1 << iota + vmaRealPermsWrite + vmaRealPermsExecute + vmaEffectivePermsRead + vmaEffectivePermsWrite + vmaEffectivePermsExecute + vmaMaxPermsRead + vmaMaxPermsWrite + vmaMaxPermsExecute + vmaPrivate + vmaGrowsDown +) + +func (v *vma) saveRealPerms() int { + var b int + if v.realPerms.Read { + b |= vmaRealPermsRead + } + if v.realPerms.Write { + b |= vmaRealPermsWrite + } + if v.realPerms.Execute { + b |= vmaRealPermsExecute + } + if v.effectivePerms.Read { + b |= vmaEffectivePermsRead + } + if v.effectivePerms.Write { + b |= vmaEffectivePermsWrite + } + if v.effectivePerms.Execute { + b |= vmaEffectivePermsExecute + } + if v.maxPerms.Read { + b |= vmaMaxPermsRead + } + if v.maxPerms.Write { + b |= vmaMaxPermsWrite + } + if v.maxPerms.Execute { + b |= vmaMaxPermsExecute + } + if v.private { + b |= vmaPrivate + } + if v.growsDown { + b |= vmaGrowsDown + } + return b +} + +func (v *vma) loadRealPerms(b int) { + if b&vmaRealPermsRead > 0 { + v.realPerms.Read = true + } + if b&vmaRealPermsWrite > 0 { + v.realPerms.Write = true + } + if b&vmaRealPermsExecute > 0 { + v.realPerms.Execute = true + } + if b&vmaEffectivePermsRead > 0 { + v.effectivePerms.Read = true + } + if b&vmaEffectivePermsWrite > 0 { + v.effectivePerms.Write = true + } + if b&vmaEffectivePermsExecute > 0 { + v.effectivePerms.Execute = true + } + if b&vmaMaxPermsRead > 0 { + v.maxPerms.Read = true + } + if b&vmaMaxPermsWrite > 0 { + v.maxPerms.Write = true + } + if b&vmaMaxPermsExecute > 0 { + v.maxPerms.Execute = true + } + if b&vmaPrivate > 0 { + v.private = true + } + if b&vmaGrowsDown > 0 { + v.growsDown = true + } +}