mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 22:52:25 -05:00 
			
		
		
		
	[chore]: Bump github.com/KimMachineGun/automemlimit from 0.2.4 to 0.2.5 (#1666)
Bumps [github.com/KimMachineGun/automemlimit](https://github.com/KimMachineGun/automemlimit) from 0.2.4 to 0.2.5. - [Release notes](https://github.com/KimMachineGun/automemlimit/releases) - [Commits](https://github.com/KimMachineGun/automemlimit/compare/v0.2.4...v0.2.5) --- updated-dependencies: - dependency-name: github.com/KimMachineGun/automemlimit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
		
					parent
					
						
							
								3f9b2336c0
							
						
					
				
			
			
				commit
				
					
						57dc742c76
					
				
			
		
					 200 changed files with 16392 additions and 38190 deletions
				
			
		
							
								
								
									
										158
									
								
								vendor/github.com/cilium/ebpf/info.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										158
									
								
								vendor/github.com/cilium/ebpf/info.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -2,6 +2,7 @@ package ebpf | |||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"bytes" | ||||
| 	"encoding/hex" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
|  | @ -10,8 +11,13 @@ import ( | |||
| 	"strings" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 	"unsafe" | ||||
| 
 | ||||
| 	"github.com/cilium/ebpf/asm" | ||||
| 	"github.com/cilium/ebpf/btf" | ||||
| 	"github.com/cilium/ebpf/internal" | ||||
| 	"github.com/cilium/ebpf/internal/sys" | ||||
| 	"github.com/cilium/ebpf/internal/unix" | ||||
| ) | ||||
| 
 | ||||
| // MapInfo describes a map. | ||||
|  | @ -22,12 +28,13 @@ type MapInfo struct { | |||
| 	ValueSize  uint32 | ||||
| 	MaxEntries uint32 | ||||
| 	Flags      uint32 | ||||
| 	// Name as supplied by user space at load time. | ||||
| 	// Name as supplied by user space at load time. Available from 4.15. | ||||
| 	Name string | ||||
| } | ||||
| 
 | ||||
| func newMapInfoFromFd(fd *internal.FD) (*MapInfo, error) { | ||||
| 	info, err := bpfGetMapInfoByFD(fd) | ||||
| func newMapInfoFromFd(fd *sys.FD) (*MapInfo, error) { | ||||
| 	var info sys.MapInfo | ||||
| 	err := sys.ObjInfo(fd, &info) | ||||
| 	if errors.Is(err, syscall.EINVAL) { | ||||
| 		return newMapInfoFromProc(fd) | ||||
| 	} | ||||
|  | @ -36,18 +43,17 @@ func newMapInfoFromFd(fd *internal.FD) (*MapInfo, error) { | |||
| 	} | ||||
| 
 | ||||
| 	return &MapInfo{ | ||||
| 		MapType(info.map_type), | ||||
| 		MapID(info.id), | ||||
| 		info.key_size, | ||||
| 		info.value_size, | ||||
| 		info.max_entries, | ||||
| 		info.map_flags, | ||||
| 		// name is available from 4.15. | ||||
| 		internal.CString(info.name[:]), | ||||
| 		MapType(info.Type), | ||||
| 		MapID(info.Id), | ||||
| 		info.KeySize, | ||||
| 		info.ValueSize, | ||||
| 		info.MaxEntries, | ||||
| 		info.MapFlags, | ||||
| 		unix.ByteSliceToString(info.Name[:]), | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func newMapInfoFromProc(fd *internal.FD) (*MapInfo, error) { | ||||
| func newMapInfoFromProc(fd *sys.FD) (*MapInfo, error) { | ||||
| 	var mi MapInfo | ||||
| 	err := scanFdInfo(fd, map[string]interface{}{ | ||||
| 		"map_type":    &mi.Type, | ||||
|  | @ -83,16 +89,21 @@ type programStats struct { | |||
| type ProgramInfo struct { | ||||
| 	Type ProgramType | ||||
| 	id   ProgramID | ||||
| 	// Truncated hash of the BPF bytecode. | ||||
| 	// Truncated hash of the BPF bytecode. Available from 4.13. | ||||
| 	Tag string | ||||
| 	// Name as supplied by user space at load time. | ||||
| 	// Name as supplied by user space at load time. Available from 4.15. | ||||
| 	Name string | ||||
| 
 | ||||
| 	btf   btf.ID | ||||
| 	stats *programStats | ||||
| 
 | ||||
| 	maps  []MapID | ||||
| 	insns []byte | ||||
| } | ||||
| 
 | ||||
| func newProgramInfoFromFd(fd *internal.FD) (*ProgramInfo, error) { | ||||
| 	info, err := bpfGetProgInfoByFD(fd) | ||||
| func newProgramInfoFromFd(fd *sys.FD) (*ProgramInfo, error) { | ||||
| 	var info sys.ProgInfo | ||||
| 	err := sys.ObjInfo(fd, &info) | ||||
| 	if errors.Is(err, syscall.EINVAL) { | ||||
| 		return newProgramInfoFromProc(fd) | ||||
| 	} | ||||
|  | @ -100,21 +111,43 @@ func newProgramInfoFromFd(fd *internal.FD) (*ProgramInfo, error) { | |||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return &ProgramInfo{ | ||||
| 		Type: ProgramType(info.prog_type), | ||||
| 		id:   ProgramID(info.id), | ||||
| 		// tag is available if the kernel supports BPF_PROG_GET_INFO_BY_FD. | ||||
| 		Tag: hex.EncodeToString(info.tag[:]), | ||||
| 		// name is available from 4.15. | ||||
| 		Name: internal.CString(info.name[:]), | ||||
| 	pi := ProgramInfo{ | ||||
| 		Type: ProgramType(info.Type), | ||||
| 		id:   ProgramID(info.Id), | ||||
| 		Tag:  hex.EncodeToString(info.Tag[:]), | ||||
| 		Name: unix.ByteSliceToString(info.Name[:]), | ||||
| 		btf:  btf.ID(info.BtfId), | ||||
| 		stats: &programStats{ | ||||
| 			runtime:  time.Duration(info.run_time_ns), | ||||
| 			runCount: info.run_cnt, | ||||
| 			runtime:  time.Duration(info.RunTimeNs), | ||||
| 			runCount: info.RunCnt, | ||||
| 		}, | ||||
| 	}, nil | ||||
| 	} | ||||
| 
 | ||||
| 	// Start with a clean struct for the second call, otherwise we may get EFAULT. | ||||
| 	var info2 sys.ProgInfo | ||||
| 
 | ||||
| 	if info.NrMapIds > 0 { | ||||
| 		pi.maps = make([]MapID, info.NrMapIds) | ||||
| 		info2.NrMapIds = info.NrMapIds | ||||
| 		info2.MapIds = sys.NewPointer(unsafe.Pointer(&pi.maps[0])) | ||||
| 	} | ||||
| 
 | ||||
| 	if info.XlatedProgLen > 0 { | ||||
| 		pi.insns = make([]byte, info.XlatedProgLen) | ||||
| 		info2.XlatedProgLen = info.XlatedProgLen | ||||
| 		info2.XlatedProgInsns = sys.NewSlicePointer(pi.insns) | ||||
| 	} | ||||
| 
 | ||||
| 	if info.NrMapIds > 0 || info.XlatedProgLen > 0 { | ||||
| 		if err := sys.ObjInfo(fd, &info2); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return &pi, nil | ||||
| } | ||||
| 
 | ||||
| func newProgramInfoFromProc(fd *internal.FD) (*ProgramInfo, error) { | ||||
| func newProgramInfoFromProc(fd *sys.FD) (*ProgramInfo, error) { | ||||
| 	var info ProgramInfo | ||||
| 	err := scanFdInfo(fd, map[string]interface{}{ | ||||
| 		"prog_type": &info.Type, | ||||
|  | @ -142,6 +175,18 @@ func (pi *ProgramInfo) ID() (ProgramID, bool) { | |||
| 	return pi.id, pi.id > 0 | ||||
| } | ||||
| 
 | ||||
| // BTFID returns the BTF ID associated with the program. | ||||
| // | ||||
| // The ID is only valid as long as the associated program is kept alive. | ||||
| // Available from 5.0. | ||||
| // | ||||
| // The bool return value indicates whether this optional field is available and | ||||
| // populated. (The field may be available but not populated if the kernel | ||||
| // supports the field but the program was loaded without BTF information.) | ||||
| func (pi *ProgramInfo) BTFID() (btf.ID, bool) { | ||||
| 	return pi.btf, pi.btf > 0 | ||||
| } | ||||
| 
 | ||||
| // RunCount returns the total number of times the program was called. | ||||
| // | ||||
| // Can return 0 if the collection of statistics is not enabled. See EnableStats(). | ||||
|  | @ -164,13 +209,50 @@ func (pi *ProgramInfo) Runtime() (time.Duration, bool) { | |||
| 	return time.Duration(0), false | ||||
| } | ||||
| 
 | ||||
| func scanFdInfo(fd *internal.FD, fields map[string]interface{}) error { | ||||
| 	raw, err := fd.Value() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| // Instructions returns the 'xlated' instruction stream of the program | ||||
| // after it has been verified and rewritten by the kernel. These instructions | ||||
| // cannot be loaded back into the kernel as-is, this is mainly used for | ||||
| // inspecting loaded programs for troubleshooting, dumping, etc. | ||||
| // | ||||
| // For example, map accesses are made to reference their kernel map IDs, | ||||
| // not the FDs they had when the program was inserted. Note that before | ||||
| // the introduction of bpf_insn_prepare_dump in kernel 4.16, xlated | ||||
| // instructions were not sanitized, making the output even less reusable | ||||
| // and less likely to round-trip or evaluate to the same program Tag. | ||||
| // | ||||
| // The first instruction is marked as a symbol using the Program's name. | ||||
| // | ||||
| // Available from 4.13. Requires CAP_BPF or equivalent. | ||||
| func (pi *ProgramInfo) Instructions() (asm.Instructions, error) { | ||||
| 	// If the calling process is not BPF-capable or if the kernel doesn't | ||||
| 	// support getting xlated instructions, the field will be zero. | ||||
| 	if len(pi.insns) == 0 { | ||||
| 		return nil, fmt.Errorf("insufficient permissions or unsupported kernel: %w", ErrNotSupported) | ||||
| 	} | ||||
| 
 | ||||
| 	fh, err := os.Open(fmt.Sprintf("/proc/self/fdinfo/%d", raw)) | ||||
| 	r := bytes.NewReader(pi.insns) | ||||
| 	var insns asm.Instructions | ||||
| 	if err := insns.Unmarshal(r, internal.NativeEndian); err != nil { | ||||
| 		return nil, fmt.Errorf("unmarshaling instructions: %w", err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Tag the first instruction with the name of the program, if available. | ||||
| 	insns[0] = insns[0].WithSymbol(pi.Name) | ||||
| 
 | ||||
| 	return insns, nil | ||||
| } | ||||
| 
 | ||||
| // MapIDs returns the maps related to the program. | ||||
| // | ||||
| // Available from 4.15. | ||||
| // | ||||
| // The bool return value indicates whether this optional field is available. | ||||
| func (pi *ProgramInfo) MapIDs() ([]MapID, bool) { | ||||
| 	return pi.maps, pi.maps != nil | ||||
| } | ||||
| 
 | ||||
| func scanFdInfo(fd *sys.FD, fields map[string]interface{}) error { | ||||
| 	fh, err := os.Open(fmt.Sprintf("/proc/self/fdinfo/%d", fd.Int())) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | @ -213,6 +295,10 @@ func scanFdInfoReader(r io.Reader, fields map[string]interface{}) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if len(fields) > 0 && scanned == 0 { | ||||
| 		return ErrNotSupported | ||||
| 	} | ||||
| 
 | ||||
| 	if scanned != len(fields) { | ||||
| 		return errMissingFields | ||||
| 	} | ||||
|  | @ -227,11 +313,9 @@ func scanFdInfoReader(r io.Reader, fields map[string]interface{}) error { | |||
| // | ||||
| // Requires at least 5.8. | ||||
| func EnableStats(which uint32) (io.Closer, error) { | ||||
| 	attr := internal.BPFEnableStatsAttr{ | ||||
| 		StatsType: which, | ||||
| 	} | ||||
| 
 | ||||
| 	fd, err := internal.BPFEnableStats(&attr) | ||||
| 	fd, err := sys.EnableStats(&sys.EnableStatsAttr{ | ||||
| 		Type: which, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue