Skip to content

Commit 54bee27

Browse files
Appease the linter
1 parent 304f0bd commit 54bee27

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

packetbeat/protos/nfs/request_handler.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,22 @@ func (r *rpc) handleReply(xid string, xdr *xdr, ts time.Time, tcptuple *common.T
240240
// get cached request
241241
v := r.callsSeen.Delete(reqID)
242242
if v != nil {
243-
nfs := v.(*nfs)
243+
nfs, ok := v.(*nfs)
244+
if !ok {
245+
logp.Warn("nfs: failed to assert nfs interface")
246+
return
247+
248+
}
244249
nfs.pbf.Event.End = ts
245250
nfs.pbf.Destination.Bytes = int64(xdr.size())
246251

247252
fields := nfs.event.Fields
248-
rpcInfo := fields["rpc"].(mapstr.M)
253+
rpcInfo, ok := fields["rpc"].(mapstr.M)
254+
if !ok {
255+
logp.Warn("nfs: failed to assert map[string]")
256+
return
257+
258+
}
249259
statusVal, err := xdr.getUInt()
250260
if dropMalformed("rpc accept status", err) {
251261
return
@@ -259,7 +269,12 @@ func (r *rpc) handleReply(xid string, xdr *xdr, ts time.Time, tcptuple *common.T
259269

260270
// populate nfs info for successfully executed requests
261271
if status == 0 {
262-
nfsInfo := fields["nfs"].(mapstr.M)
272+
nfsInfo, ok := fields["nfs"].(mapstr.M)
273+
if !ok {
274+
logp.Warn("nfs: failed to assert map[string]")
275+
return
276+
277+
}
263278
nfsStatus, err := nfs.getNFSReplyStatus(xdr)
264279
if dropMalformed("nfs reply status", err) {
265280
return

packetbeat/protos/nfs/rpc.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ func New(
9292
}
9393

9494
func (r *rpc) init(results protos.Reporter, config *rpcConfig) error {
95-
r.setFromConfig(config)
95+
if err := r.setFromConfig(config); err != nil {
96+
return err
97+
}
9698
r.results = results
9799
r.callsSeen = common.NewCacheWithRemovalListener(
98100
r.transactionTimeout,
@@ -214,7 +216,7 @@ func (r *rpc) handleRPCFragment(
214216
break
215217
}
216218

217-
marker := uint32(binary.BigEndian.Uint32(st.rawData[0:4]))
219+
marker := binary.BigEndian.Uint32(st.rawData[0:4])
218220
size := int(marker & rpcSizeMask)
219221
islast := (marker & rpcLastFrag) != 0
220222

packetbeat/protos/nfs/xdr.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ import (
2323
)
2424

2525
const (
26-
maxOpaque uint32 = 1 << 20
27-
maxVector uint32 = 1 << 15
26+
maxOpaque int = 1 << 20
27+
maxVector int = 1 << 15
2828
)
2929

3030
// XDR maps the External Data Representation
3131
type xdr struct {
3232
data []byte
33-
offset uint32
33+
offset int
3434
}
3535

3636
func newXDR(data []byte) *xdr {
@@ -47,7 +47,7 @@ func (r *xdr) size() int {
4747
}
4848

4949
func (r *xdr) getUInt() (uint32, error) {
50-
if int(r.offset)+4 > len(r.data) {
50+
if r.offset+4 > len(r.data) {
5151
return 0, fmt.Errorf("xdr: truncated uint32")
5252
}
5353
i := binary.BigEndian.Uint32(r.data[r.offset : r.offset+4])
@@ -56,7 +56,7 @@ func (r *xdr) getUInt() (uint32, error) {
5656
}
5757

5858
func (r *xdr) getUHyper() (uint64, error) {
59-
if int(r.offset)+8 > len(r.data) {
59+
if r.offset+8 > len(r.data) {
6060
return 0, fmt.Errorf("xdr: truncated uint64")
6161
}
6262
i := binary.BigEndian.Uint64(r.data[r.offset : r.offset+8])
@@ -72,24 +72,24 @@ func (r *xdr) getString() (string, error) {
7272
return string(b), nil
7373
}
7474

75-
func (r *xdr) getOpaque(length uint32) ([]byte, error) {
76-
if length > maxOpaque {
75+
func (r *xdr) getOpaque(length int) ([]byte, error) {
76+
if length < 0 || length > maxOpaque {
7777
return nil, fmt.Errorf("xdr: opaque length %d exceeds limit", length)
7878
}
7979

80-
start := int(r.offset)
81-
end := start + int(length)
80+
start := r.offset
81+
end := start + length
8282
if end > len(r.data) {
8383
return nil, fmt.Errorf("xdr: opaque length %d exceeds buffer", length)
8484
}
8585

86-
padding := int((4 - (length & 3)) & 3)
86+
padding := (4 - (length & 3)) & 3
8787
if end+padding > len(r.data) {
8888
return nil, fmt.Errorf("xdr: opaque padding exceeds buffer")
8989
}
9090

9191
b := r.data[start:end]
92-
r.offset = uint32(end + padding)
92+
r.offset = end + padding
9393
return b, nil
9494
}
9595

@@ -98,15 +98,15 @@ func (r *xdr) getDynamicOpaque() ([]byte, error) {
9898
if err != nil {
9999
return nil, err
100100
}
101-
return r.getOpaque(l)
101+
return r.getOpaque(int(l))
102102
}
103103

104104
func (r *xdr) getUIntVector() ([]uint32, error) {
105105
l, err := r.getUInt()
106106
if err != nil {
107107
return nil, err
108108
}
109-
if l > maxVector {
109+
if int(l) > maxVector {
110110
return nil, fmt.Errorf("xdr: vector length %d exceeds limit", l)
111111
}
112112
v := make([]uint32, int(l))

packetbeat/protos/nfs/xdr_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,11 @@ func TestXdrDecodingFailures(t *testing.T) {
163163
_, err = xdr.getOpaque(maxOpaque + 1)
164164
require.Error(t, err)
165165

166+
b := make([]byte, maxOpaque+1)
167+
xdr = makeXDR(b)
168+
_, err = xdr.getOpaque(-1)
169+
require.Error(t, err)
170+
166171
b = make([]byte, maxOpaque-1)
167172
xdr = makeXDR(b)
168173
_, err = xdr.getOpaque(maxOpaque)

0 commit comments

Comments
 (0)