SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
Bug Legends Quiz Show
25 kwietnia 2018
I kto to mówi?
- Wojciech Żmuda
- woz@semihalf.com
Test Głosowania
www.pollev.com/
buglegends405
Test Głosowania
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
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
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
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
Quiz wiedzy z C
www.pollev.com/buglegends405
a) zależy od architektury
b) 1
c) 4
d) nie jest zdefiniowany przez standard
sizeof(char) == ?
www.pollev.com/buglegends405
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
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
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
a) 0
b) 1
c) sizeof(char*)
d) zachowanie niezdefiniowane (Undefined Behaviour)
struct X {
;
};
sizeof(struct X) = ? *
*
wg ISO C
www.pollev.com/buglegends405
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
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
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
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
#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
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
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
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
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
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
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
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 ?
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
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!
Pytania?

Weitere ähnliche Inhalte

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

Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychSKN Shader
 
Performance troubleshooting in Hyper-V
Performance troubleshooting in Hyper-VPerformance troubleshooting in Hyper-V
Performance troubleshooting in Hyper-VLukasz Kaluzny
 
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PROIDEA
 
Interfejs RS232C
Interfejs RS232CInterfejs RS232C
Interfejs RS232Crlutowsk
 
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic NetworkingPLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic NetworkingPROIDEA
 
Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Semihalf
 
ROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemOpen-RnD
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Wojciech Szymański
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Semihalf
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPROIDEA
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.Semihalf
 
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...Adam Przybyła
 
Hacking Internet of Things
Hacking Internet of ThingsHacking Internet of Things
Hacking Internet of ThingsSecuRing
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!Semihalf
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004Tomasz Cieplak
 

Ähnlich wie Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018 (20)

Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
Performance troubleshooting in Hyper-V
Performance troubleshooting in Hyper-VPerformance troubleshooting in Hyper-V
Performance troubleshooting in Hyper-V
 
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
 
Interfejs RS232C
Interfejs RS232CInterfejs RS232C
Interfejs RS232C
 
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic NetworkingPLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking
 
Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.
 
Kickoff to Node.js
Kickoff to Node.jsKickoff to Node.js
Kickoff to Node.js
 
ROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektem
 
C
C  C
C
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...
 
Hacking Internet of Things
Hacking Internet of ThingsHacking Internet of Things
Hacking Internet of Things
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004
 
WP - Notatki
WP - NotatkiWP - Notatki
WP - Notatki
 

Mehr von Semihalf

Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym Semihalf
 
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.Semihalf
 
Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?Semihalf
 
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01Semihalf
 
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Semihalf
 
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Semihalf
 
CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. Semihalf
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Semihalf
 
Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02Semihalf
 
Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.Semihalf
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Semihalf
 
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Semihalf
 
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?Semihalf
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Semihalf
 
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.Semihalf
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Semihalf
 
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.Semihalf
 
Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.Semihalf
 
DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.Semihalf
 

Mehr von Semihalf (20)

Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
 
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
 
Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?
 
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
 
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
 
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
 
CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special.
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
 
Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02
 
Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).
 
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
 
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
 
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?
 
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
 
Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.
 
DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.
 

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

  • 1. Bug Legends Quiz Show 25 kwietnia 2018 I kto to mówi? - Wojciech Żmuda - woz@semihalf.com
  • 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. 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. 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. 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. Quiz wiedzy z C www.pollev.com/buglegends405
  • 9. a) zależy od architektury b) 1 c) 4 d) nie jest zdefiniowany przez standard sizeof(char) == ? www.pollev.com/buglegends405
  • 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. 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. 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. 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. 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. 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. 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. 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. #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. 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. 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. 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. 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. 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. 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. 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. 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. 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!