Best Syzkaller code snippet using odroid.Copy
odroid.go
Source:odroid.go
1// Copyright 2017 syzkaller project authors. All rights reserved.2// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.3// +build odroid4package odroid5// #cgo pkg-config: libusb-1.06// #include <linux/usb/ch9.h>7// #include <linux/usb/ch11.h>8// #include <libusb.h>9import "C"10import (11 "fmt"12 "io"13 "io/ioutil"14 "os"15 "os/exec"16 "path/filepath"17 "reflect"18 "time"19 "unsafe"20 "github.com/google/syzkaller/pkg/config"21 . "github.com/google/syzkaller/pkg/log"22 "github.com/google/syzkaller/pkg/osutil"23 "github.com/google/syzkaller/vm/vmimpl"24)25func init() {26 vmimpl.Register("odroid", ctor)27}28type Config struct {29 Host_Addr string // ip address of the host machine30 Slave_Addr string // ip address of the Odroid board31 Console string // console device name (e.g. "/dev/ttyUSB0")32 Hub_Bus int // host USB bus number for the USB hub33 Hub_Device int // host USB device number for the USB hub34 Hub_Port int // port on the USB hub to which Odroid is connected35}36type Pool struct {37 env *vmimpl.Env38 cfg *Config39}40type instance struct {41 cfg *Config42 os string43 sshkey string44 closed chan bool45 debug bool46}47func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {48 cfg := &Config{}49 if err := config.LoadData(env.Config, cfg); err != nil {50 return nil, fmt.Errorf("failed to parse odroid vm config: %v", err)51 }52 if cfg.Host_Addr == "" {53 return nil, fmt.Errorf("config param host_addr is empty")54 }55 if cfg.Slave_Addr == "" {56 return nil, fmt.Errorf("config param slave_addr is empty")57 }58 if cfg.Console == "" {59 return nil, fmt.Errorf("config param console is empty")60 }61 if cfg.Hub_Bus == 0 {62 return nil, fmt.Errorf("config param hub_bus is empty")63 }64 if cfg.Hub_Device == 0 {65 return nil, fmt.Errorf("config param hub_device is empty")66 }67 if cfg.Hub_Port == 0 {68 return nil, fmt.Errorf("config param hub_port is empty")69 }70 if !osutil.IxExist(cfg.Console) {71 return nil, fmt.Errorf("console file '%v' does not exist", cfg.Console)72 }73 pool := &Pool{74 cfg: cfg,75 env: env,76 }77 return pool, nil78}79func (pool *Pool) Count() int {80 return 1 // no support for multiple Odroid devices yet81}82func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {83 inst := &instance{84 cfg: pool.cfg,85 os: pool.env.OS,86 sshkey: pool.env.Sshkey,87 closed: make(chan bool),88 debug: pool.env.Debug,89 }90 closeInst := inst91 defer func() {92 if closeInst != nil {93 closeInst.Close()94 }95 }()96 if err := inst.repair(); err != nil {97 return nil, err98 }99 // Create working dir if doesn't exist.100 inst.ssh("mkdir -p /data/")101 // Remove temp files from previous runs.102 inst.ssh("rm -rf /data/syzkaller-*")103 closeInst = nil104 return inst, nil105}106func (inst *instance) Forward(port int) (string, error) {107 return fmt.Sprintf(inst.cfg.Host_Addr+":%v", port), nil108}109func (inst *instance) ssh(command string) ([]byte, error) {110 if inst.debug {111 Logf(0, "executing ssh %+v", command)112 }113 rpipe, wpipe, err := osutil.LongPipe()114 if err != nil {115 return nil, err116 }117 args := append(vmimpl.SSHArgs(inst.debug, inst.sshkey, 22), "root@"+inst.cfg.Slave_Addr, command)118 if inst.debug {119 Logf(0, "running command: ssh %#v", args)120 }121 cmd := osutil.Command("ssh", args...)122 cmd.Stdout = wpipe123 cmd.Stderr = wpipe124 if err := cmd.Start(); err != nil {125 wpipe.Close()126 return nil, err127 }128 wpipe.Close()129 done := make(chan bool)130 go func() {131 select {132 case <-time.After(time.Minute):133 if inst.debug {134 Logf(0, "ssh hanged")135 }136 cmd.Process.Kill()137 case <-done:138 }139 }()140 if err := cmd.Wait(); err != nil {141 close(done)142 out, _ := ioutil.ReadAll(rpipe)143 if inst.debug {144 Logf(0, "ssh failed: %v\n%s", err, out)145 }146 return nil, fmt.Errorf("ssh %+v failed: %v\n%s", args, err, out)147 }148 close(done)149 if inst.debug {150 Logf(0, "ssh returned")151 }152 out, _ := ioutil.ReadAll(rpipe)153 return out, nil154}155func switchPortPower(busNum, deviceNum, portNum int, power bool) error {156 var context *C.libusb_context157 if err := C.libusb_init(&context); err != 0 {158 return fmt.Errorf("failed to init libusb: %v\n", err)159 }160 defer C.libusb_exit(context)161 var rawList **C.libusb_device162 numDevices := int(C.libusb_get_device_list(context, &rawList))163 if numDevices < 0 {164 return fmt.Errorf("failed to init libusb: %v", numDevices)165 }166 defer C.libusb_free_device_list(rawList, 1)167 var deviceList []*C.libusb_device168 *(*reflect.SliceHeader)(unsafe.Pointer(&deviceList)) = reflect.SliceHeader{169 Data: uintptr(unsafe.Pointer(rawList)),170 Len: numDevices,171 Cap: numDevices,172 }173 var hub *C.libusb_device174 for i := 0; i < numDevices; i++ {175 var desc C.struct_libusb_device_descriptor176 if err := C.libusb_get_device_descriptor(deviceList[i], &desc); err != 0 {177 return fmt.Errorf("failed to get device descriptor: %v", err)178 }179 if desc.bDeviceClass != C.USB_CLASS_HUB {180 continue181 }182 if C.libusb_get_bus_number(deviceList[i]) != C.uint8_t(busNum) {183 continue184 }185 if C.libusb_get_device_address(deviceList[i]) != C.uint8_t(deviceNum) {186 continue187 }188 hub = deviceList[i]189 break190 }191 if hub == nil {192 return fmt.Errorf("hub not found: bus: %v, device: %v", busNum, deviceNum)193 }194 var handle *C.libusb_device_handle195 if err := C.libusb_open(hub, &handle); err != 0 {196 return fmt.Errorf("failed to open usb device: %v", err)197 }198 request := C.uint8_t(C.USB_REQ_CLEAR_FEATURE)199 if power {200 request = C.uint8_t(C.USB_REQ_SET_FEATURE)201 }202 port := C.uint16_t(portNum)203 timeout := C.uint(1000)204 if err := C.libusb_control_transfer(handle, C.USB_RT_PORT, request,205 C.USB_PORT_FEAT_POWER, port, nil, 0, timeout); err < 0 {206 return fmt.Errorf("failed to send control message: %v\n", err)207 }208 return nil209}210func (inst *instance) repair() error {211 // Try to shutdown gracefully.212 Logf(1, "odroid: trying to ssh")213 if err := inst.waitForSSH(10 * time.Second); err == nil {214 Logf(1, "odroid: ssh succeeded, shutting down now")215 inst.ssh("shutdown now")216 if !vmimpl.SleepInterruptible(20 * time.Second) {217 return fmt.Errorf("shutdown in progress")218 }219 } else {220 Logf(1, "odroid: ssh failed")221 }222 // Hard reset by turning off and back on power on a hub port.223 Logf(1, "odroid: hard reset, turning off power")224 if err := switchPortPower(inst.cfg.Hub_Bus, inst.cfg.Hub_Device, inst.cfg.Hub_Port, false); err != nil {225 return err226 }227 if !vmimpl.SleepInterruptible(5 * time.Second) {228 return fmt.Errorf("shutdown in progress")229 }230 if err := switchPortPower(inst.cfg.Hub_Bus, inst.cfg.Hub_Device, inst.cfg.Hub_Port, true); err != nil {231 return err232 }233 // Now wait for boot.234 Logf(1, "odroid: power back on, waiting for boot")235 if err := inst.waitForSSH(150 * time.Second); err != nil {236 return err237 }238 Logf(1, "odroid: boot succeeded")239 return nil240}241func (inst *instance) waitForSSH(timeout time.Duration) error {242 return vmimpl.WaitForSSH(inst.debug, timeout, inst.cfg.Slave_Addr, inst.sshkey, "root", inst.os, 22)243}244func (inst *instance) Close() {245 close(inst.closed)246}247func (inst *instance) Copy(hostSrc string) (string, error) {248 basePath := "/data/"249 vmDst := filepath.Join(basePath, filepath.Base(hostSrc))250 args := append(vmimpl.SCPArgs(inst.debug, inst.sshkey, 22), hostSrc, "root@"+inst.cfg.Slave_Addr+":"+vmDst)251 cmd := osutil.Command("scp", args...)252 if inst.debug {253 Logf(0, "running command: scp %#v", args)254 cmd.Stdout = os.Stdout255 cmd.Stderr = os.Stdout256 }257 if err := cmd.Start(); err != nil {258 return "", err259 }260 done := make(chan bool)261 go func() {...
Copy
Using AI Code Generation
1import "fmt"2func main() {3 odroid := new(Odroid)4 odroid.Copy()5}6import "fmt"7func main() {8 odroid := new(Odroid)9 odroid.Paste()10}11import "fmt"12func main() {13 odroid := new(Odroid)14 odroid.Cut()15}16import "fmt"17func main() {18 odroid := new(Odroid)19 odroid.Delete()20}21import "fmt"22func main() {23 odroid := new(Odroid)24 odroid.Rename()25}26import "fmt"27func main() {28 odroid := new(Odroid)29 odroid.CreateFolder()30}31import "fmt"32func main() {33 odroid := new(Odroid)34 odroid.DeleteFolder()35}36import "fmt"37func main() {38 odroid := new(Odroid)39 odroid.RenameFolder()40}41import "fmt"42func main() {43 odroid := new(Odroid)44 odroid.Open()45}46import "fmt"47func main() {48 odroid := new(Odroid)49 odroid.Close()50}51import "fmt"52func main() {53 odroid := new(Odroid)54 odroid.SelectAll()55}
Copy
Using AI Code Generation
1import (2func main() {3 odroid := new(odroid.Odroid)4 odroid.Copy()5 fmt.Println("copied")6}7import (8type Odroid struct {9}10func (odroid *Odroid) Copy() {11 cmd := exec.Command("cp", "-f", "/home/odroid/2.go", "/home/odroid/2.go")12 cmd.Start()13 fmt.Println("copying")14}15import (16func TestCopy(t *testing.T) {17 odroid := new(Odroid)18 odroid.Copy()19}20./2.go:11: odroid.Copy undefined (type *Odroid has no field or method Copy)21type Odroid struct {22}23func (odroid *Odroid) Copy() {24 cmd := exec.Command("cp", "-f", "/home/odroid/2.go", "/home/odroid/2.go")25 cmd.Start()26 fmt.Println("copying")27}28import (
Copy
Using AI Code Generation
1import "fmt"2func main() {3 odroid1 := odroid{1, "Odroid", "Odroid", 1}4 odroid2 := odroid{2, "Odroid", "Odroid", 1}5 odroid1.Copy(&odroid2)6 fmt.Println(odroid1)7 fmt.Println(odroid2)8}9import "fmt"10func main() {11 odroid1 := odroid{1, "Odroid", "Odroid", 1}12 odroid2 := odroid{2, "Odroid", "Odroid", 1}13 odroid1.Copy(&odroid2)14 fmt.Println(odroid1)15 fmt.Println(odroid2)16}17import "fmt"18func main() {19 odroid1 := odroid{1, "Odroid", "Odroid", 1}20 odroid2 := odroid{2, "Odroid", "Odroid", 1}21 odroid1.Copy(&odroid2)22 fmt.Println(odroid1)23 fmt.Println(odroid2)24}25import "fmt"26func main() {27 odroid1 := odroid{1, "Odroid", "Odroid", 1}28 odroid2 := odroid{2, "Odroid", "Odroid", 1}29 odroid1.Copy(&odroid2)30 fmt.Println(odroid1)31 fmt.Println(odroid2)32}33import "fmt"34func main() {35 odroid1 := odroid{1, "Odroid", "Odroid", 1}36 odroid2 := odroid{2, "Odroid", "Odroid", 1}37 odroid1.Copy(&odroid2)38 fmt.Println(odroid1)39 fmt.Println(odroid2)40}41import "fmt"42func main() {
Copy
Using AI Code Generation
1import (2func main() {3 odroid := &Odroid{&Computer{&Device{1, "Odroid"}}}4 odroid.Copy()5}6import (7func main() {8 computer := &Computer{&Device{1, "Computer"}}9 computer.Copy()10}11import (12func main() {13 device := &Device{1, "Device"}14 device.Copy()15}16import (17func main() {18 device := &Device{1, "Device"}19 device.Copy()20}21import (22func main() {23 device := &Device{1, "Device"}24 device.Copy()25}26import (27func main() {28 device := &Device{1, "Device"}29 device.Copy()30}31import (32func main() {33 device := &Device{1, "Device"}34 device.Copy()35}36import (37func main() {38 device := &Device{1, "Device"}39 device.Copy()40}41import (42func main() {43 device := &Device{1, "Device"}44 device.Copy()45}46import (47func main() {48 device := &Device{1, "Device"}49 device.Copy()50}51import (52func main() {53 device := &Device{1, "Device"}54 device.Copy()55}
Copy
Using AI Code Generation
1import (2func main() {3 odroid.Copy()4 fmt.Println("I am in 2.go")5}6import (7func Copy() {8 fmt.Println("I am in odroid.go")9}10void Copy() {11 printf("I am in odroid.h12");13}14void Copy() {15 printf("I am in odroid.c16");17}
Copy
Using AI Code Generation
1import "fmt"2func main() {3 odroid := odroid{"Odroid", 8, 4}4 odroid2 := odroid.copy()5 fmt.Println(odroid2)6}7import "fmt"8func main() {9 odroid := odroid{"Odroid", 8, 4}10 odroid2 := odroid.copy()11 fmt.Println(odroid2)12}13import "fmt"14func main() {15 odroid := odroid{"Odroid", 8, 4}16 odroid2 := odroid.copy()17 fmt.Println(odroid2)18}19import "fmt"20func main() {21 odroid := odroid{"Odroid", 8, 4}22 odroid2 := odroid.copy()23 fmt.Println(odroid2)24}25import "fmt"26func main() {27 odroid := odroid{"Odroid", 8, 4}28 odroid2 := odroid.copy()29 fmt.Println(odroid2)30}31import "fmt"32func main() {33 odroid := odroid{"Odroid", 8, 4}34 odroid2 := odroid.copy()35 fmt.Println(odroid2)36}37import "fmt"38func main() {39 odroid := odroid{"Odroid", 8, 4}40 odroid2 := odroid.copy()41 fmt.Println(odroid2)42}43import "fmt"44func main() {45 odroid := odroid{"Odroid", 8, 4}46 odroid2 := odroid.copy()47 fmt.Println(odroid2)48}
Copy
Using AI Code Generation
1import "fmt"2func main() {3 odroid := new(Odroid)4 odroid.Copy()5}6import "fmt"7func main() {8 odroid := Odroid{}9 odroid.Copy()10}11import "fmt"12func main() {13 odroid := Odroid{}14 odroid.Copy()15}16import "fmt"17func main() {18 odroid := Odroid{}19 odroid.Copy()20}21import "fmt"22func main() {23 odroid := Odroid{}24 odroid.Copy()25}26import "fmt"27func main() {28 odroid := Odroid{}29 odroid.Copy()30}
Copy
Using AI Code Generation
1import "fmt"2func main() {3 odroid := Odroid{true, "Odroid", 2, 0}4 odroid.Copy()5 fmt.Println(odroid)6}7{true Odroid 2 2}
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!