Skip to content

Commit e1d910a

Browse files
authored
koordlet: fix unsafe conversion in net_cls (#2173)
Signed-off-by: saintube <saintube@foxmail.com>
1 parent 0fa719d commit e1d910a

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

pkg/koordlet/resourceexecutor/cgroup.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,24 @@ func readCgroupAndParseInt64(parentDir string, r sysutil.Resource) (int64, error
150150
return v, nil
151151
}
152152

153+
func readCgroupAndParseUint32(parentDir string, r sysutil.Resource) (uint32, error) {
154+
// TODO: refactor with generics
155+
s, err := cgroupFileRead(parentDir, r)
156+
if err != nil {
157+
return 0, err
158+
}
159+
160+
// "max" means unlimited
161+
if strings.Trim(s, "\n ") == CgroupMaxSymbolStr {
162+
return math.MaxInt32, nil
163+
}
164+
v, err := strconv.ParseUint(s, 10, 32)
165+
if err != nil {
166+
return 0, fmt.Errorf("cannot parse cgroup value %s, err: %v", s, err)
167+
}
168+
return uint32(v), nil
169+
}
170+
153171
func readCgroupAndParseUint64(parentDir string, r sysutil.Resource) (uint64, error) {
154172
s, err := cgroupFileRead(parentDir, r)
155173
if err != nil {

pkg/koordlet/resourceexecutor/reader.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type CgroupReader interface {
4040
ReadCPUProcs(parentDir string) ([]uint32, error)
4141
ReadPSI(parentDir string) (*sysutil.PSIByResource, error)
4242
ReadMemoryColdPageUsage(parentDir string) (uint64, error)
43-
ReadNetClsId(parentDir string) (uint64, error)
43+
ReadNetClsId(parentDir string) (uint32, error)
4444
}
4545

4646
var _ CgroupReader = &CgroupV1Reader{}
@@ -231,12 +231,12 @@ func (r *CgroupV1Reader) ReadPSI(parentDir string) (*sysutil.PSIByResource, erro
231231
return psi, nil
232232
}
233233

234-
func (r *CgroupV1Reader) ReadNetClsId(parentDir string) (uint64, error) {
234+
func (r *CgroupV1Reader) ReadNetClsId(parentDir string) (uint32, error) {
235235
resource, ok := sysutil.DefaultRegistry.Get(sysutil.CgroupVersionV1, sysutil.NetClsClassIdName)
236236
if !ok {
237237
return 0, ErrResourceNotRegistered
238238
}
239-
return readCgroupAndParseUint64(parentDir, resource)
239+
return readCgroupAndParseUint32(parentDir, resource)
240240
}
241241

242242
var _ CgroupReader = &CgroupV2Reader{}
@@ -445,12 +445,12 @@ func (r *CgroupV2Reader) ReadPSI(parentDir string) (*sysutil.PSIByResource, erro
445445
return psi, nil
446446
}
447447

448-
func (r *CgroupV2Reader) ReadNetClsId(parentDir string) (uint64, error) {
448+
func (r *CgroupV2Reader) ReadNetClsId(parentDir string) (uint32, error) {
449449
resource, ok := sysutil.DefaultRegistry.Get(sysutil.CgroupVersionV2, sysutil.NetClsClassIdName)
450450
if !ok {
451451
return 0, ErrResourceNotRegistered
452452
}
453-
return readCgroupAndParseUint64(parentDir, resource)
453+
return readCgroupAndParseUint32(parentDir, resource)
454454
}
455455

456456
func NewCgroupReader() CgroupReader {

pkg/koordlet/runtimehooks/hooks/tc/rule.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ func (p *tcPlugin) ruleUpdateCbForPod(target *statesinformer.CallbackTarget) err
165165
if err != nil || netClsId == 0 {
166166
continue
167167
}
168-
r.uidToHandle[pod.Pod.UID] = uint32(netClsId)
169-
r.handleToUid[uint32(netClsId)] = pod.Pod.UID
168+
r.uidToHandle[pod.Pod.UID] = netClsId
169+
r.handleToUid[netClsId] = pod.Pod.UID
170170
p.updateRule(r)
171171
}
172172
})

0 commit comments

Comments
 (0)