mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Change verity action to be a fs member
Currently the verity action is a global variable, which causes the same action for all verity mounts, and is overwritten for each new verity mount. Changed it to a member of verity fs. PiperOrigin-RevId: 369348522
This commit is contained in:
@@ -200,7 +200,7 @@ func (fs *filesystem) verifyChildLocked(ctx context.Context, parent *dentry, chi
|
||||
// contains the expected xattrs. If the file or the xattr does not
|
||||
// exist, it indicates unexpected modifications to the file system.
|
||||
if err == syserror.ENOENT || err == syserror.ENODATA {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for %s: %v", merkleOffsetInParentXattr, childPath, err))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for %s: %v", merkleOffsetInParentXattr, childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -209,7 +209,7 @@ func (fs *filesystem) verifyChildLocked(ctx context.Context, parent *dentry, chi
|
||||
// unexpected modifications to the file system.
|
||||
offset, err := strconv.Atoi(off)
|
||||
if err != nil {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s for %s to int: %v", merkleOffsetInParentXattr, childPath, err))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s for %s to int: %v", merkleOffsetInParentXattr, childPath, err))
|
||||
}
|
||||
|
||||
// Open parent Merkle tree file to read and verify child's hash.
|
||||
@@ -223,7 +223,7 @@ func (fs *filesystem) verifyChildLocked(ctx context.Context, parent *dentry, chi
|
||||
// The parent Merkle tree file should have been created. If it's
|
||||
// missing, it indicates an unexpected modification to the file system.
|
||||
if err == syserror.ENOENT {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Failed to open parent Merkle file for %s: %v", childPath, err))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to open parent Merkle file for %s: %v", childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -243,7 +243,7 @@ func (fs *filesystem) verifyChildLocked(ctx context.Context, parent *dentry, chi
|
||||
// contains the expected xattrs. If the file or the xattr does not
|
||||
// exist, it indicates unexpected modifications to the file system.
|
||||
if err == syserror.ENOENT || err == syserror.ENODATA {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for %s: %v", merkleSizeXattr, childPath, err))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for %s: %v", merkleSizeXattr, childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -253,7 +253,7 @@ func (fs *filesystem) verifyChildLocked(ctx context.Context, parent *dentry, chi
|
||||
// unexpected modifications to the file system.
|
||||
parentSize, err := strconv.Atoi(dataSize)
|
||||
if err != nil {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s for %s to int: %v", merkleSizeXattr, childPath, err))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s for %s to int: %v", merkleSizeXattr, childPath, err))
|
||||
}
|
||||
|
||||
fdReader := FileReadWriteSeeker{
|
||||
@@ -266,7 +266,7 @@ func (fs *filesystem) verifyChildLocked(ctx context.Context, parent *dentry, chi
|
||||
Start: parent.lowerVD,
|
||||
}, &vfs.StatOptions{})
|
||||
if err == syserror.ENOENT {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Failed to get parent stat for %s: %v", childPath, err))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to get parent stat for %s: %v", childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -296,7 +296,7 @@ func (fs *filesystem) verifyChildLocked(ctx context.Context, parent *dentry, chi
|
||||
})
|
||||
parent.hashMu.RUnlock()
|
||||
if err != nil && err != io.EOF {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Verification for %s failed: %v", childPath, err))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Verification for %s failed: %v", childPath, err))
|
||||
}
|
||||
|
||||
// Cache child hash when it's verified the first time.
|
||||
@@ -333,7 +333,7 @@ func (fs *filesystem) verifyStatAndChildrenLocked(ctx context.Context, d *dentry
|
||||
Flags: linux.O_RDONLY,
|
||||
})
|
||||
if err == syserror.ENOENT {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to open merkle file for %s: %v", childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to open merkle file for %s: %v", childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -347,7 +347,7 @@ func (fs *filesystem) verifyStatAndChildrenLocked(ctx context.Context, d *dentry
|
||||
})
|
||||
|
||||
if err == syserror.ENODATA {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for merkle file of %s: %v", merkleSizeXattr, childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for merkle file of %s: %v", merkleSizeXattr, childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -355,7 +355,7 @@ func (fs *filesystem) verifyStatAndChildrenLocked(ctx context.Context, d *dentry
|
||||
|
||||
size, err := strconv.Atoi(merkleSize)
|
||||
if err != nil {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s for %s to int: %v", merkleSizeXattr, childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s for %s to int: %v", merkleSizeXattr, childPath, err))
|
||||
}
|
||||
|
||||
if d.isDir() && len(d.childrenNames) == 0 {
|
||||
@@ -365,14 +365,14 @@ func (fs *filesystem) verifyStatAndChildrenLocked(ctx context.Context, d *dentry
|
||||
})
|
||||
|
||||
if err == syserror.ENODATA {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for merkle file of %s: %v", childrenOffsetXattr, childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for merkle file of %s: %v", childrenOffsetXattr, childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
childrenOffset, err := strconv.Atoi(childrenOffString)
|
||||
if err != nil {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenOffsetXattr, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenOffsetXattr, err))
|
||||
}
|
||||
|
||||
childrenSizeString, err := fd.GetXattr(ctx, &vfs.GetXattrOptions{
|
||||
@@ -381,23 +381,23 @@ func (fs *filesystem) verifyStatAndChildrenLocked(ctx context.Context, d *dentry
|
||||
})
|
||||
|
||||
if err == syserror.ENODATA {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for merkle file of %s: %v", childrenSizeXattr, childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s for merkle file of %s: %v", childrenSizeXattr, childPath, err))
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
childrenSize, err := strconv.Atoi(childrenSizeString)
|
||||
if err != nil {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenSizeXattr, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenSizeXattr, err))
|
||||
}
|
||||
|
||||
childrenNames := make([]byte, childrenSize)
|
||||
if _, err := fd.PRead(ctx, usermem.BytesIOSequence(childrenNames), int64(childrenOffset), vfs.ReadOptions{}); err != nil {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to read children map for %s: %v", childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to read children map for %s: %v", childPath, err))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(childrenNames, &d.childrenNames); err != nil {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Failed to deserialize childrenNames of %s: %v", childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Failed to deserialize childrenNames of %s: %v", childPath, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -442,7 +442,7 @@ func (fs *filesystem) verifyStatAndChildrenLocked(ctx context.Context, d *dentry
|
||||
}
|
||||
|
||||
if _, err := merkletree.Verify(params); err != nil && err != io.EOF {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Verification stat for %s failed: %v", childPath, err))
|
||||
return fs.alertIntegrityViolation(fmt.Sprintf("Verification stat for %s failed: %v", childPath, err))
|
||||
}
|
||||
d.mode = uint32(stat.Mode)
|
||||
d.uid = stat.UID
|
||||
@@ -475,7 +475,7 @@ func (fs *filesystem) getChildLocked(ctx context.Context, parent *dentry, name s
|
||||
// The file was previously accessed. If the
|
||||
// file does not exist now, it indicates an
|
||||
// unexpected modification to the file system.
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Target file %s is expected but missing", path))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Target file %s is expected but missing", path))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -487,7 +487,7 @@ func (fs *filesystem) getChildLocked(ctx context.Context, parent *dentry, name s
|
||||
// does not exist now, it indicates an unexpected
|
||||
// modification to the file system.
|
||||
if err == syserror.ENOENT {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Expected Merkle file for target %s but none found", path))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Expected Merkle file for target %s but none found", path))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -558,7 +558,7 @@ func (fs *filesystem) lookupAndVerifyLocked(ctx context.Context, parent *dentry,
|
||||
|
||||
childVD, err := parent.getLowerAt(ctx, vfsObj, name)
|
||||
if parent.verityEnabled() && err == syserror.ENOENT {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("file %s expected but not found", parentPath+"/"+name))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("file %s expected but not found", parentPath+"/"+name))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -572,7 +572,7 @@ func (fs *filesystem) lookupAndVerifyLocked(ctx context.Context, parent *dentry,
|
||||
if err != nil {
|
||||
if err == syserror.ENOENT {
|
||||
if parent.verityEnabled() {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", parentPath+"/"+name))
|
||||
return nil, fs.alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", parentPath+"/"+name))
|
||||
}
|
||||
childMerkleFD, err := vfsObj.OpenAt(ctx, fs.creds, &vfs.PathOperation{
|
||||
Root: parent.lowerVD,
|
||||
@@ -861,7 +861,7 @@ func (d *dentry) openLocked(ctx context.Context, rp *vfs.ResolvingPath, opts *vf
|
||||
// missing, it indicates an unexpected modification to the file system.
|
||||
if err != nil {
|
||||
if err == syserror.ENOENT {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("File %s expected but not found", path))
|
||||
return nil, d.fs.alertIntegrityViolation(fmt.Sprintf("File %s expected but not found", path))
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
@@ -884,7 +884,7 @@ func (d *dentry) openLocked(ctx context.Context, rp *vfs.ResolvingPath, opts *vf
|
||||
// the file system.
|
||||
if err != nil {
|
||||
if err == syserror.ENOENT {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", path))
|
||||
return nil, d.fs.alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", path))
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
@@ -909,7 +909,7 @@ func (d *dentry) openLocked(ctx context.Context, rp *vfs.ResolvingPath, opts *vf
|
||||
})
|
||||
if err != nil {
|
||||
if err == syserror.ENOENT {
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", path))
|
||||
return nil, d.fs.alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", path))
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
@@ -927,7 +927,7 @@ func (d *dentry) openLocked(ctx context.Context, rp *vfs.ResolvingPath, opts *vf
|
||||
if err != nil {
|
||||
if err == syserror.ENOENT {
|
||||
parentPath, _ := d.fs.vfsfs.VirtualFilesystem().PathnameWithDeleted(ctx, d.fs.rootDentry.lowerVD, d.parent.lowerVD)
|
||||
return nil, alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", parentPath))
|
||||
return nil, d.fs.alertIntegrityViolation(fmt.Sprintf("Merkle file for %s expected but not found", parentPath))
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -98,9 +98,6 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
// action specifies the action towards detected violation.
|
||||
action ViolationAction
|
||||
|
||||
// verityMu synchronizes concurrent operations that enable verity and perform
|
||||
// verification checks.
|
||||
verityMu sync.RWMutex
|
||||
@@ -179,6 +176,9 @@ type filesystem struct {
|
||||
// system.
|
||||
alg HashAlgorithm
|
||||
|
||||
// action specifies the action towards detected violation.
|
||||
action ViolationAction
|
||||
|
||||
// opts is the string mount options passed to opts.Data.
|
||||
opts string
|
||||
|
||||
@@ -235,8 +235,8 @@ func (FilesystemType) Release(ctx context.Context) {}
|
||||
// alertIntegrityViolation alerts a violation of integrity, which usually means
|
||||
// unexpected modification to the file system is detected. In ErrorOnViolation
|
||||
// mode, it returns EIO, otherwise it panic.
|
||||
func alertIntegrityViolation(msg string) error {
|
||||
if action == ErrorOnViolation {
|
||||
func (fs *filesystem) alertIntegrityViolation(msg string) error {
|
||||
if fs.action == ErrorOnViolation {
|
||||
return syserror.EIO
|
||||
}
|
||||
panic(msg)
|
||||
@@ -288,7 +288,6 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
Action: ErrorOnViolation,
|
||||
}
|
||||
}
|
||||
action = iopts.Action
|
||||
|
||||
var lowerMount *vfs.Mount
|
||||
var mountedLowerVD vfs.VirtualDentry
|
||||
@@ -336,6 +335,7 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
creds: creds.Fork(),
|
||||
alg: iopts.Alg,
|
||||
lowerMount: lowerMount,
|
||||
action: iopts.Action,
|
||||
opts: opts.Data,
|
||||
allowRuntimeEnable: iopts.AllowRuntimeEnable,
|
||||
}
|
||||
@@ -389,7 +389,7 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
// the root Merkle file, or it's never generated.
|
||||
fs.vfsfs.DecRef(ctx)
|
||||
d.DecRef(ctx)
|
||||
return nil, nil, alertIntegrityViolation("Failed to find root Merkle file")
|
||||
return nil, nil, fs.alertIntegrityViolation("Failed to find root Merkle file")
|
||||
}
|
||||
|
||||
// Clear the Merkle tree file if they are to be generated at runtime.
|
||||
@@ -452,7 +452,7 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
Size: sizeOfStringInt32,
|
||||
})
|
||||
if err == syserror.ENOENT || err == syserror.ENODATA {
|
||||
return nil, nil, alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", childrenOffsetXattr, err))
|
||||
return nil, nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", childrenOffsetXattr, err))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -460,7 +460,7 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
|
||||
off, err := strconv.Atoi(offString)
|
||||
if err != nil {
|
||||
return nil, nil, alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenOffsetXattr, err))
|
||||
return nil, nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenOffsetXattr, err))
|
||||
}
|
||||
|
||||
sizeString, err := vfsObj.GetXattrAt(ctx, creds, &vfs.PathOperation{
|
||||
@@ -471,14 +471,14 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
Size: sizeOfStringInt32,
|
||||
})
|
||||
if err == syserror.ENOENT || err == syserror.ENODATA {
|
||||
return nil, nil, alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", childrenSizeXattr, err))
|
||||
return nil, nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", childrenSizeXattr, err))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
size, err := strconv.Atoi(sizeString)
|
||||
if err != nil {
|
||||
return nil, nil, alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenSizeXattr, err))
|
||||
return nil, nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", childrenSizeXattr, err))
|
||||
}
|
||||
|
||||
lowerMerkleFD, err := vfsObj.OpenAt(ctx, fs.creds, &vfs.PathOperation{
|
||||
@@ -488,7 +488,7 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
Flags: linux.O_RDONLY,
|
||||
})
|
||||
if err == syserror.ENOENT {
|
||||
return nil, nil, alertIntegrityViolation(fmt.Sprintf("Failed to open root Merkle file: %v", err))
|
||||
return nil, nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to open root Merkle file: %v", err))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -498,11 +498,11 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
|
||||
childrenNames := make([]byte, size)
|
||||
if _, err := lowerMerkleFD.PRead(ctx, usermem.BytesIOSequence(childrenNames), int64(off), vfs.ReadOptions{}); err != nil {
|
||||
return nil, nil, alertIntegrityViolation(fmt.Sprintf("Failed to read root children map: %v", err))
|
||||
return nil, nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to read root children map: %v", err))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(childrenNames, &d.childrenNames); err != nil {
|
||||
return nil, nil, alertIntegrityViolation(fmt.Sprintf("Failed to deserialize childrenNames: %v", err))
|
||||
return nil, nil, fs.alertIntegrityViolation(fmt.Sprintf("Failed to deserialize childrenNames: %v", err))
|
||||
}
|
||||
|
||||
if err := fs.verifyStatAndChildrenLocked(ctx, d, stat); err != nil {
|
||||
@@ -879,7 +879,7 @@ func (fd *fileDescription) IterDirents(ctx context.Context, cb vfs.IterDirentsCa
|
||||
// Verify that the child is expected.
|
||||
if dirent.Name != "." && dirent.Name != ".." {
|
||||
if _, ok := fd.d.childrenNames[dirent.Name]; !ok {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Unexpected children %s", dirent.Name))
|
||||
return fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Unexpected children %s", dirent.Name))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -893,7 +893,7 @@ func (fd *fileDescription) IterDirents(ctx context.Context, cb vfs.IterDirentsCa
|
||||
|
||||
// The result should contain all children plus "." and "..".
|
||||
if fd.d.verityEnabled() && len(ds) != len(fd.d.childrenNames)+2 {
|
||||
return alertIntegrityViolation(fmt.Sprintf("Unexpected children number %d", len(ds)))
|
||||
return fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Unexpected children number %d", len(ds)))
|
||||
}
|
||||
|
||||
for fd.off < int64(len(ds)) {
|
||||
@@ -1065,7 +1065,7 @@ func (fd *fileDescription) enableVerity(ctx context.Context) (uintptr, error) {
|
||||
// or directory other than the root, the parent Merkle tree file should
|
||||
// have also been initialized.
|
||||
if fd.lowerFD == nil || fd.merkleReader == nil || fd.merkleWriter == nil || (fd.parentMerkleWriter == nil && fd.d != fd.d.fs.rootDentry) {
|
||||
return 0, alertIntegrityViolation("Unexpected verity fd: missing expected underlying fds")
|
||||
return 0, fd.d.fs.alertIntegrityViolation("Unexpected verity fd: missing expected underlying fds")
|
||||
}
|
||||
|
||||
hash, dataSize, err := fd.generateMerkleLocked(ctx)
|
||||
@@ -1138,7 +1138,7 @@ func (fd *fileDescription) measureVerity(ctx context.Context, verityDigest hosta
|
||||
if fd.d.fs.allowRuntimeEnable {
|
||||
return 0, syserror.ENODATA
|
||||
}
|
||||
return 0, alertIntegrityViolation("Ioctl measureVerity: no hash found")
|
||||
return 0, fd.d.fs.alertIntegrityViolation("Ioctl measureVerity: no hash found")
|
||||
}
|
||||
|
||||
// The first part of VerityDigest is the metadata.
|
||||
@@ -1228,7 +1228,7 @@ func (fd *fileDescription) PRead(ctx context.Context, dst usermem.IOSequence, of
|
||||
// contains the expected xattrs. If the xattr does not exist, it
|
||||
// indicates unexpected modifications to the file system.
|
||||
if err == syserror.ENODATA {
|
||||
return 0, alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", merkleSizeXattr, err))
|
||||
return 0, fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", merkleSizeXattr, err))
|
||||
}
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@@ -1238,7 +1238,7 @@ func (fd *fileDescription) PRead(ctx context.Context, dst usermem.IOSequence, of
|
||||
// unexpected modifications to the file system.
|
||||
size, err := strconv.Atoi(dataSize)
|
||||
if err != nil {
|
||||
return 0, alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", merkleSizeXattr, err))
|
||||
return 0, fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", merkleSizeXattr, err))
|
||||
}
|
||||
|
||||
dataReader := FileReadWriteSeeker{
|
||||
@@ -1271,7 +1271,7 @@ func (fd *fileDescription) PRead(ctx context.Context, dst usermem.IOSequence, of
|
||||
})
|
||||
fd.d.hashMu.RUnlock()
|
||||
if err != nil {
|
||||
return 0, alertIntegrityViolation(fmt.Sprintf("Verification failed: %v", err))
|
||||
return 0, fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Verification failed: %v", err))
|
||||
}
|
||||
return n, err
|
||||
}
|
||||
@@ -1346,7 +1346,7 @@ func (fd *fileDescription) Translate(ctx context.Context, required, optional mem
|
||||
// contains the expected xattrs. If the xattr does not exist, it
|
||||
// indicates unexpected modifications to the file system.
|
||||
if err == syserror.ENODATA {
|
||||
return ts, alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", merkleSizeXattr, err))
|
||||
return ts, fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Failed to get xattr %s: %v", merkleSizeXattr, err))
|
||||
}
|
||||
if err != nil {
|
||||
return ts, err
|
||||
@@ -1356,7 +1356,7 @@ func (fd *fileDescription) Translate(ctx context.Context, required, optional mem
|
||||
// unexpected modifications to the file system.
|
||||
size, err := strconv.Atoi(dataSize)
|
||||
if err != nil {
|
||||
return ts, alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", merkleSizeXattr, err))
|
||||
return ts, fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Failed to convert xattr %s to int: %v", merkleSizeXattr, err))
|
||||
}
|
||||
|
||||
merkleReader := FileReadWriteSeeker{
|
||||
@@ -1389,7 +1389,7 @@ func (fd *fileDescription) Translate(ctx context.Context, required, optional mem
|
||||
DataAndTreeInSameFile: false,
|
||||
})
|
||||
if err != nil {
|
||||
return ts, alertIntegrityViolation(fmt.Sprintf("Verification failed: %v", err))
|
||||
return ts, fd.d.fs.alertIntegrityViolation(fmt.Sprintf("Verification failed: %v", err))
|
||||
}
|
||||
}
|
||||
return ts, err
|
||||
|
||||
Reference in New Issue
Block a user