Skip to content
This repository was archived by the owner on Jan 10, 2025. It is now read-only.

Commit 1a6f30f

Browse files
committed
fix clippy errors: cast to more stick alignment, warning: not consumed copy
1 parent 9712efc commit 1a6f30f

File tree

4 files changed

+37
-38
lines changed

4 files changed

+37
-38
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ include = [
2727
combine = "2.1.1"
2828
libc = "0.2.0"
2929
time = "0.1"
30+
byteorder = "1.2.1"
3031

3132
[dev-dependencies]
3233

src/ebpf.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
//! <https://www.kernel.org/doc/Documentation/networking/filter.txt>, or for a shorter version of
1919
//! the list of the operation codes: <https://github.com/iovisor/bpf-docs/blob/master/eBPF.md>
2020
21+
extern crate byteorder;
22+
use self::byteorder::{ByteOrder, LittleEndian};
23+
2124
/// Maximum number of instructions in an eBPF program.
2225
pub const PROG_MAX_INSNS: usize = 4096;
2326
/// Size of an eBPF instructions, in bytes.
@@ -513,12 +516,8 @@ pub fn get_insn(prog: &[u8], idx: usize) -> Insn {
513516
opc: prog[INSN_SIZE * idx],
514517
dst: prog[INSN_SIZE * idx + 1] & 0x0f,
515518
src: (prog[INSN_SIZE * idx + 1] & 0xf0) >> 4,
516-
off: unsafe {
517-
let x = prog.as_ptr().offset((INSN_SIZE * idx + 2) as isize) as *const i16; *x
518-
},
519-
imm: unsafe {
520-
let x = prog.as_ptr().offset((INSN_SIZE * idx + 4) as isize) as *const i32; *x
521-
},
519+
off: LittleEndian::read_i16(&prog[(INSN_SIZE * idx + 2) .. ]),
520+
imm: LittleEndian::read_i32(&prog[(INSN_SIZE * idx + 4) .. ]),
522521
}
523522
}
524523

src/jit.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ fn set_anchor(jit: &mut JitMemory, target: isize) {
255255

256256
// Load [src + offset] into dst
257257
#[inline]
258-
fn emit_load(jit: &mut JitMemory, size: OperandSize, src: u8, dst: u8, offset: i32) {
258+
fn emit_load(jit: &mut JitMemory, size: &OperandSize, src: u8, dst: u8, offset: i32) {
259259
let data = match size {
260260
OperandSize::S64 => 1,
261261
_ => 0
@@ -297,7 +297,7 @@ fn emit_load_imm(jit: &mut JitMemory, dst: u8, imm: i64) {
297297

298298
// Store register src to [dst + offset]
299299
#[inline]
300-
fn emit_store(jit: &mut JitMemory, size: OperandSize, src: u8, dst: u8, offset: i32) {
300+
fn emit_store(jit: &mut JitMemory, size: &OperandSize, src: u8, dst: u8, offset: i32) {
301301
match size {
302302
OperandSize::S16 => emit1(jit, 0x66), // 16-bit override
303303
_ => {},
@@ -325,7 +325,7 @@ fn emit_store(jit: &mut JitMemory, size: OperandSize, src: u8, dst: u8, offset:
325325

326326
// Store immediate to [dst + offset]
327327
#[inline]
328-
fn emit_store_imm32(jit: &mut JitMemory, size: OperandSize, dst: u8, offset: i32, imm: i32) {
328+
fn emit_store_imm32(jit: &mut JitMemory, size: &OperandSize, dst: u8, offset: i32, imm: i32) {
329329
match size {
330330
OperandSize::S16 => emit1(jit, 0x66), // 16-bit override
331331
_ => {},
@@ -485,12 +485,12 @@ impl<'a> JitMemory<'a> {
485485
// We have a fixed (simulated) mbuff: update mem and mem_end offset values in it.
486486
// Store mem at mbuff + mem_offset. Trash R8.
487487
emit_alu64(self, 0x01, RDI, R8); // add mbuff to mem_offset in R8
488-
emit_store(self, OperandSize::S64, RDX, R8, 0); // set mem at mbuff + mem_offset
488+
emit_store(self, &OperandSize::S64, RDX, R8, 0); // set mem at mbuff + mem_offset
489489
// Store mem_end at mbuff + mem_end_offset. Trash R9.
490-
emit_load(self, OperandSize::S64, RDX, R8, 0); // load mem into R8
490+
emit_load(self, &OperandSize::S64, RDX, R8, 0); // load mem into R8
491491
emit_alu64(self, 0x01, RCX, R8); // add mem_len to mem (= mem_end)
492492
emit_alu64(self, 0x01, RDI, R9); // add mbuff to mem_end_offset
493-
emit_store(self, OperandSize::S64, R8, R9, 0); // store mem_end
493+
emit_store(self, &OperandSize::S64, R8, R9, 0); // store mem_end
494494

495495
// Move rdi into register 1
496496
if map_register(1) != RDI {
@@ -522,32 +522,32 @@ impl<'a> JitMemory<'a> {
522522
// BPF_LD class
523523
// R10 is a constant pointer to mem.
524524
ebpf::LD_ABS_B =>
525-
emit_load(self, OperandSize::S8, R10, RAX, insn.imm),
525+
emit_load(self, &OperandSize::S8, R10, RAX, insn.imm),
526526
ebpf::LD_ABS_H =>
527-
emit_load(self, OperandSize::S16, R10, RAX, insn.imm),
527+
emit_load(self, &OperandSize::S16, R10, RAX, insn.imm),
528528
ebpf::LD_ABS_W =>
529-
emit_load(self, OperandSize::S32, R10, RAX, insn.imm),
529+
emit_load(self, &OperandSize::S32, R10, RAX, insn.imm),
530530
ebpf::LD_ABS_DW =>
531-
emit_load(self, OperandSize::S64, R10, RAX, insn.imm),
531+
emit_load(self, &OperandSize::S64, R10, RAX, insn.imm),
532532
ebpf::LD_IND_B => {
533533
emit_mov(self, R10, R11); // load mem into R11
534534
emit_alu64(self, 0x01, src, R11); // add src to R11
535-
emit_load(self, OperandSize::S8, R11, RAX, insn.imm); // ld R0, mem[src+imm]
535+
emit_load(self, &OperandSize::S8, R11, RAX, insn.imm); // ld R0, mem[src+imm]
536536
},
537537
ebpf::LD_IND_H => {
538538
emit_mov(self, R10, R11); // load mem into R11
539539
emit_alu64(self, 0x01, src, R11); // add src to R11
540-
emit_load(self, OperandSize::S16, R11, RAX, insn.imm); // ld R0, mem[src+imm]
540+
emit_load(self, &OperandSize::S16, R11, RAX, insn.imm); // ld R0, mem[src+imm]
541541
},
542542
ebpf::LD_IND_W => {
543543
emit_mov(self, R10, R11); // load mem into R11
544544
emit_alu64(self, 0x01, src, R11); // add src to R11
545-
emit_load(self, OperandSize::S32, R11, RAX, insn.imm); // ld R0, mem[src+imm]
545+
emit_load(self, &OperandSize::S32, R11, RAX, insn.imm); // ld R0, mem[src+imm]
546546
},
547547
ebpf::LD_IND_DW => {
548548
emit_mov(self, R10, R11); // load mem into R11
549549
emit_alu64(self, 0x01, src, R11); // add src to R11
550-
emit_load(self, OperandSize::S64, R11, RAX, insn.imm); // ld R0, mem[src+imm]
550+
emit_load(self, &OperandSize::S64, R11, RAX, insn.imm); // ld R0, mem[src+imm]
551551
},
552552

553553
ebpf::LD_DW_IMM => {
@@ -559,33 +559,33 @@ impl<'a> JitMemory<'a> {
559559

560560
// BPF_LDX class
561561
ebpf::LD_B_REG =>
562-
emit_load(self, OperandSize::S8, src, dst, insn.off as i32),
562+
emit_load(self, &OperandSize::S8, src, dst, insn.off as i32),
563563
ebpf::LD_H_REG =>
564-
emit_load(self, OperandSize::S16, src, dst, insn.off as i32),
564+
emit_load(self, &OperandSize::S16, src, dst, insn.off as i32),
565565
ebpf::LD_W_REG =>
566-
emit_load(self, OperandSize::S32, src, dst, insn.off as i32),
566+
emit_load(self, &OperandSize::S32, src, dst, insn.off as i32),
567567
ebpf::LD_DW_REG =>
568-
emit_load(self, OperandSize::S64, src, dst, insn.off as i32),
568+
emit_load(self, &OperandSize::S64, src, dst, insn.off as i32),
569569

570570
// BPF_ST class
571571
ebpf::ST_B_IMM =>
572-
emit_store_imm32(self, OperandSize::S8, dst, insn.off as i32, insn.imm),
572+
emit_store_imm32(self, &OperandSize::S8, dst, insn.off as i32, insn.imm),
573573
ebpf::ST_H_IMM =>
574-
emit_store_imm32(self, OperandSize::S16, dst, insn.off as i32, insn.imm),
574+
emit_store_imm32(self, &OperandSize::S16, dst, insn.off as i32, insn.imm),
575575
ebpf::ST_W_IMM =>
576-
emit_store_imm32(self, OperandSize::S32, dst, insn.off as i32, insn.imm),
576+
emit_store_imm32(self, &OperandSize::S32, dst, insn.off as i32, insn.imm),
577577
ebpf::ST_DW_IMM =>
578-
emit_store_imm32(self, OperandSize::S64, dst, insn.off as i32, insn.imm),
578+
emit_store_imm32(self, &OperandSize::S64, dst, insn.off as i32, insn.imm),
579579

580580
// BPF_STX class
581581
ebpf::ST_B_REG =>
582-
emit_store(self, OperandSize::S8, src, dst, insn.off as i32),
582+
emit_store(self, &OperandSize::S8, src, dst, insn.off as i32),
583583
ebpf::ST_H_REG =>
584-
emit_store(self, OperandSize::S16, src, dst, insn.off as i32),
584+
emit_store(self, &OperandSize::S16, src, dst, insn.off as i32),
585585
ebpf::ST_W_REG =>
586-
emit_store(self, OperandSize::S32, src, dst, insn.off as i32),
586+
emit_store(self, &OperandSize::S32, src, dst, insn.off as i32),
587587
ebpf::ST_DW_REG =>
588-
emit_store(self, OperandSize::S64, src, dst, insn.off as i32),
588+
emit_store(self, &OperandSize::S64, src, dst, insn.off as i32),
589589
ebpf::ST_W_XADD => unimplemented!(),
590590
ebpf::ST_DW_XADD => unimplemented!(),
591591

src/lib.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
use std::u32;
2323
use std::collections::HashMap;
2424

25+
extern crate byteorder;
26+
use self::byteorder::{ByteOrder, LittleEndian};
27+
2528
extern crate combine;
2629
extern crate time;
2730

@@ -885,12 +888,8 @@ impl<'a> EbpfVmFixedMbuff<'a> {
885888
panic!("Error: buffer too small ({:?}), cannot use data_offset {:?} and data_end_offset {:?}",
886889
l, self.mbuff.data_offset, self.mbuff.data_end_offset);
887890
}
888-
unsafe {
889-
let mut data = self.mbuff.buffer.as_ptr().offset(self.mbuff.data_offset as isize) as *mut u64;
890-
let mut data_end = self.mbuff.buffer.as_ptr().offset(self.mbuff.data_end_offset as isize) as *mut u64;
891-
*data = mem.as_ptr() as u64;
892-
*data_end = mem.as_ptr() as u64 + mem.len() as u64;
893-
}
891+
LittleEndian::write_u64(&mut self.mbuff.buffer[(self.mbuff.data_offset) .. ], mem.as_ptr() as u64);
892+
LittleEndian::write_u64(&mut self.mbuff.buffer[(self.mbuff.data_end_offset) .. ], mem.as_ptr() as u64 + mem.len() as u64);
894893
self.parent.prog_exec(mem, &self.mbuff.buffer)
895894
}
896895

0 commit comments

Comments
 (0)