structOpsCopyMemberBytes copies the bytes of `m` into `km`.
(m, km btf.Member, data, kernVData []byte, size int)
| 162 | |
| 163 | // structOpsCopyMemberBytes copies the bytes of `m` into `km`. |
| 164 | func structOpsCopyMemberBytes(m, km btf.Member, data, kernVData []byte, size int) error { |
| 165 | mLayout, err := newStructOpsMemberLayout(m) |
| 166 | if err != nil { |
| 167 | return fmt.Errorf("user member %s: %w", m.Name, err) |
| 168 | } |
| 169 | |
| 170 | kLayout, err := newStructOpsMemberLayout(km) |
| 171 | if err != nil { |
| 172 | return fmt.Errorf("kernel member %s: %w", km.Name, err) |
| 173 | } |
| 174 | |
| 175 | if mLayout.size != size { |
| 176 | return fmt.Errorf("member %q: unexpected validated size %d, got %d", m.Name, size, mLayout.size) |
| 177 | } |
| 178 | if kLayout.size != size { |
| 179 | return fmt.Errorf("member %q: unexpected validated size %d, got %d", km.Name, size, kLayout.size) |
| 180 | } |
| 181 | |
| 182 | src, err := mLayout.bytes(data) |
| 183 | if err != nil { |
| 184 | return fmt.Errorf("member %q: userdata is too small", m.Name) |
| 185 | } |
| 186 | |
| 187 | dst, err := kLayout.bytes(kernVData) |
| 188 | if err != nil { |
| 189 | return fmt.Errorf("member %q: value type is too small", km.Name) |
| 190 | } |
| 191 | |
| 192 | switch mLayout.typ.(type) { |
| 193 | case *btf.Struct, *btf.Union: |
| 194 | if !structOpsIsMemZeroed(src) { |
| 195 | return fmt.Errorf("non-zero nested struct %s: %w", m.Name, ErrNotSupported) |
| 196 | } |
| 197 | return nil |
| 198 | } |
| 199 | |
| 200 | copy(dst, src) |
| 201 | return nil |
| 202 | } |
| 203 | |
| 204 | // structOpsCopyMember copies `m` into `km`. |
| 205 | func structOpsCopyMember(m, km btf.Member, data []byte, kernVData []byte) error { |
no test coverage detected
searching dependent graphs…