Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018

37 Aufrufe

Veröffentlicht am

Prezentacja z barcampu firmy semihalf. Spotkanie miało formę interaktywnego quizu. Zaprezentowaliśmy kilkanaście nietypowych bugów, z którymi mieliśmy do czynienia. Uczestnicy wskazywali właściwe rozwiązania.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018

  1. 1. Bug Legends Quiz Show 25 kwietnia 2018 I kto to mówi? - Wojciech Żmuda - woz@semihalf.com
  2. 2. Test Głosowania
  3. 3. www.pollev.com/ buglegends405 Test Głosowania
  4. 4. Stan: - Urządzenie wyposażone jest w moduł WiFi, lutowany bezpośrednio do płyty głównej, który poprzez I2C steruje przekaźnikami. Problem: - Po przeniesieniu do serwerowni, urządzenie niepoprawnie obsługuje protokół I2C (złe napięcia na linii). Pytanie: - Jaka jest przyczyna awarii? a) zakłócenia EM od pobliskich serwerów upośledzają pracę układu b) złośliwy sąsiad wysyła pakiety WiFi-killer z piwnicy c) dostarczone przez producenta modułu SDK ma niską jakość d) wilgoć zakłócająca działanie układu www.pollev.com/buglegends405
  5. 5. Stan: - Urządzenie wyposażone jest w moduł WiFi, lutowany bezpośrednio do płyty głównej, który poprzez I2C steruje przekaźnikami. Problem: - Po przeniesieniu do serwerowni, urządzenie niepoprawnie obsługuje protokół I2C (złe napięcia na linii). Pytanie: - Jaka jest przyczyna awarii? a) zakłócenia EM od pobliskich serwerów upośledzają pracę układu b) złośliwy sąsiad wysyła pakiety WiFi-killer z piwnicy c) dostarczone przez producenta modułu SDK ma niską jakość d) wilgoć zakłócająca działanie układu www.pollev.com/buglegends405
  6. 6. Stan: - dwa urządzenia, Host i Karta Sieciowa, połączone kablem PCIe o długości 10cm Problem: - po przełożeniu zestawu z biurka do labu, duży transfer powoduje powstanie błędów transmisji na PCIe Pytanie: - Co zostało użyte do naprawy? a) młotek ze stali St500 b) opakowanie czekolady Milka c) spinacz biurowy i pudełko zapałek d) WD40 i taśma izolacyjna www.pollev.com/buglegends405
  7. 7. a) młotek ze stali St500 b) opakowanie czekolady Milka c) spinacz biurowy i pudełko zapałek d) WD40 i taśma izolacyjna www.pollev.com/buglegends405
  8. 8. Quiz wiedzy z C www.pollev.com/buglegends405
  9. 9. a) zależy od architektury b) 1 c) 4 d) nie jest zdefiniowany przez standard sizeof(char) == ? www.pollev.com/buglegends405
  10. 10. sizeof(char) == 1 6.5.3.4 The sizeof and _Alignof operators 4. When sizeof is applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1. a) zależy od architektury b) 1 c) 4 d) Nie jest zdefiniowany przez standard www.pollev.com/buglegends405
  11. 11. Ile bitów mieści char? a) zależy od architektury b) 7 c) 8 d) nie jest zdefiniowany przez standard www.pollev.com/buglegends405
  12. 12. Ile bitów mieści char ? 5.2.4.2.1 Sizes of integer types <limits.h> (...) Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign. —number of bits for smallest object that is not a bit-field (byte) CHAR_BIT 8 const size_t BitsInByte = CHAR_BIT * sizeof(char); a) zależy od architektury b) 7 c) 8 d) Nie jest zdefiniowany przez standard www.pollev.com/buglegends405
  13. 13. a) 0 b) 1 c) sizeof(char*) d) zachowanie niezdefiniowane (Undefined Behaviour) struct X { ; }; sizeof(struct X) = ? * * wg ISO C www.pollev.com/buglegends405
  14. 14. a) 0 b) 1 c) sizeof(char*) d) Zachowanie niezdefiniowane (Undefined Behaviour) struct X { ; }; Standard C11 (Draft N1570) 6.7.2.1 Structure and union specifiers 7. If the struct-declaration-list contains no named members, the behavior is undefined. www.pollev.com/buglegends405
  15. 15. struct acpi_dev_node { #ifdef CONFIG_ACPI void *handle; #endif }; #ifdef CONFIG_ACPI #define ACPI_HANDLE(dev) ((dev)->acpi_node.handle) #else #define ACPI_HANDLE(dev) (NULL) Źródło: https://lkml.org/lkml/2012/11/19/453
  16. 16. a) 8 b) 16 c) Nie skompiluje się d) Zachowanie niezdefiniowane struct X { uint64_t a; char arr[]; }; printf("sizeof(X) = %lun", sizeof(struct X)); * * wg ISO C www.pollev.com/buglegends405
  17. 17. a) 8 b) 16 c) Nie skompiluje się d) Zachowanie niezdefiniowane struct X { uint64_t a; char arr[]; }; printf("sizeof... 6.7.2.1 Structure and union specifiers 3. …, except that the last member of a structure with more than one named member may have incomplete array type; such a structure (and any union containing, possibly recursively, a member that is such a structure) shall not be a member of a structure or an element of an array. To nie jest arr[0] www.pollev.com/buglegends405
  18. 18. #define DATA_SIZE struct X { uint64_t a; char arr[DATA_SIZE]; }; f (void) { int a; struct X object; object.arr[0] = ... www.pollev.com/buglegends405
  19. 19. struct proto_hdr { uint16_t type; /* data type */ uint16_t size; /* data size in bytes */ char data[]; /* flexible array member - pointer to payload */ }; uint16_t size = 64; struct proto_hdr *h = malloc ( sizeof (struct proto_hdr) + sizeof (char [size])); h->type = TOP_SECRET_PAYLOAD; h->size = size; www.pollev.com/buglegends405
  20. 20. a) sizeof (struct ab) == 4; sizeof ( struct a0b) == 4; b) sizeof (struct ab) == 4; sizeof ( struct a0b) == 8; c) sizeof (struct ab) == 8; sizeof ( struct a0b) == 8; d) Nie skompiluje się struct ab{ int a : 1; int b : 1; }; struct a0b{ int a : 1; int : 0; int b : 1; }; sizeof (struct ab) == ? sizeof (struct a0b) == ? * wg ISO C www.pollev.com/buglegends405
  21. 21. a) sizeof (struct ab) == 4; sizeof ( struct a0b) == 4; b) sizeof (struct ab) == 4; sizeof ( struct a0b) == 8; c) sizeof (struct ab) == 8; sizeof ( struct a0b) == 8; d) Nie skompiluje się struct ab{ int a : 1; int b : 1; }; struct a0b{ int a : 1; int : 0; int b : 1; }; 6.7.2.1 Structure and union specifiers As a special case, a bit-field structure member with a width of 0 indicates that no further bit-field is to be packed into the unit in which the previous bit- field, if any, was placed. www.pollev.com/buglegends405
  22. 22. struct nextvend { u_char nv_magic[4]; /* Magic number for vendor specificity */ u_char nv_version; /* NeXT protocol version */ /* * Round the beginning * of the union to a 16 * bit boundary due to * struct/union alignment * on the m68k. */ unsigned short :0; union { u_char NV0[58]; struct { u_char NV1_opcode; /* opcode - Version 1 */ u_char NV1_xid; /* transcation id */ u_char NV1_text[NVMAXTEXT]; /* text */ u_char NV1_null; /* null terminator */ } NV1; } nv_U; ... Źródło: https://github.com/apple/darwin-xnu/blob/master/bsd/netinet/bootp.h#L97 www.pollev.com/buglegends405
  23. 23. CPU0 System wbudowany interfejs SSI CPU0 i CPU1 w osobnych IC Brak MMU – adresowanie fizyczne ETH SSI – Synchronous Serial Interface ETH → CPU0 → SSI → CPU1 Problem – co jakiś czas błąd krytyczny sterty na CPU0 powoduje reset całego systemu CPU1 → SSI → CPU0 → ETH Jaka jest przyczyna błędu krytycznego na stercie? ETH CPU1 www.pollev.com/buglegends405
  24. 24. Jaka jest przyczyna błędu krytycznego na stercie ? a) błąd w sprzęcie b) wyścig i brak walidacji danych w driverze interfejsu SSI c) błąd w implementacji sterty d) błąd w dokumentacji CPU Jaka jest przyczyna błędu krytycznego na stercie ? www.pollev.com/buglegends405
  25. 25. a) błąd w sprzęcie b) wyścig i brak walidacji danych w driverze interfejsu SSI c) błąd w implementacji sterty d) błąd w dokumentacji CPU Jaka jest przyczyna błędu krytycznego na stercie ? Jaka jest przyczyna błędu krytycznego na stercie ?
  26. 26. Wyjaśnienie interfejs SSI CPU0 CPU1 Format ramki SSI HEADER | PAYLOAD LEN | TYPE CPU1 wysyła ramkę bez sprawdzenia czy transmisja poprzedniej już się zakończyła request #1 reply #1 request #2 reply #2 CPU0 skopiuje dane z SSI bez sprawdzenia wielkości bufora docelowego i uszkodzi dane kontrolne sterty
  27. 27. Programuj wbrew regułom! 29.05. gdz. 19:00 Drugie życie elektroniki. Jak z routera zrobić nierouter? 13.06 gdz. 19:00 Oczyszczacz powietrza i stos sieciowy? Czas na test!
  28. 28. Pytania?

×