Branch Privilege Injection (CVE-2024-45332, Paper) je nejnovější bezpečnostní problém procesorů Intel. Intel jej řeší ve včerejším opravném vydání 20250512 mikrokódů pro své procesory. Neprivilegovaný uživatel si například může přečíst /etc/shadow (YouTube).
Dle plánu byl vývoj Firefoxu přesunut z Mercurialu na Git. Oficiální repozitář se zdrojovými kódy je na GitHubu.
V terminálovém multiplexoru GNU Screen byly nalezeny a v upstreamu ve verzi 5.0.1 už opraveny bezpečnostních chyby CVE-2025-23395, CVE-2025-46802, CVE-2025-46803, CVE-2025-46804 a CVE-2025-46805. Podrobnosti na blogu SUSE Security Teamu.
Training Solo (Paper, GitHub) je nejnovější bezpečnostní problém procesorů Intel s eIBRS a některých procesorů ARM. Intel vydal opravnou verzi 20250512 mikrokódů pro své procesory.
Byla vydána nová verze 25.05.11 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Nejnovější Shotcut je již vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
Svobodný elektronický platební systém GNU Taler (Wikipedie, cgit) byl vydán ve verzi 1.0. GNU Taler chrání soukromí plátců a zároveň zajišťuje, aby byl příjem viditelný pro úřady. S vydáním verze 1.0 byl systém spuštěn ve Švýcarsku.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 209. brněnský sraz, který proběhne tento pátek 16. května od 18:00 ve studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Jelikož se Brno stalo jedním z hlavních míst, kde se vyvíjí open source knihovna OpenSSL, tentokrát se OpenAlt komunita potká s komunitou OpenSSL. V rámci srazu Anton Arapov z OpenSSL
… více »GNOME Foundation má nového výkonného ředitele. Po deseti měsících skončil dočasný výkonný ředitel Richard Littauer. Vedení nadace převzal Steven Deobald.
Byl publikován přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) za uplynulé dva měsíce. Servo zvládne už i Gmail. Zakázány jsou příspěvky generované pomocí AI.
Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.
int main(int argc, char **argv) { int status; FILE *fw; int fp; char buf[255]; int l; // read length int i; buf[0] = '\0'; // in case there is nothing to read buf[255] = '\0'; // garentee a end-of-line status = mkfifo("/tmp/pb173_syslog", S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); if(status == -1) { perror( "Mkfifo failed" ); //exit(1); ; } /*Daemon reads the FIFO and writes into a text file*/ fp = open("/tmp/pb173_syslog", "r"); if(fp == -1) { printf("Could not open the pipe\n"); } fw = fopen("home/~/Documents/Vyvoj_C/ukol_4/fifo_log.txt", "a+"); if(fw == -0) { perror( "Opening logfile" ); exit(1); ; } while(1) { l = read(fp, buf, 254); if(l) // print only if the read length is greater than 0 printf("%s", buf); fprintf(fw, "%s", buf); for(i=0; i<255; i++) // initialize the whole buffer again buf[i] = '\0'; } close(fp); close(fw); exit(EXIT_SUCCESS); }Selhava mi to tady a ja netusim vubec proc. V manualu je psane, ze pri neuspechu se vraci nula. Proc se ale vraci? Nevidim zadny duvod, proc by to melo selhavat...
fw = fopen("home/~/Documents/Vyvoj_C/ukol_4/fifo_log.txt", "a+"); if(fw == -0) { perror( "Opening logfile" ); exit(1); ; }Vyhodi chybu:
Opening logfile: No such file or directoryZajimalo by me co prehlizim.
Řešení dotazu:
Zkus do konzole zadat:fw = fopen("home/~/Documents/Vyvoj_C/ukol_4/fifo_log.txt", "a+");
ls home/~/Documents/Vyvoj_C/ukol_4/fifo_log.txtJá třeba žádnou takovouhle cestu v systému nemám.
"If the file is successfully opened....Otherwise, a null pointer is returned.Cili pokud je otevreni uspesne, do promenne se priradi ukazatel. Pokud je neuspesne, priradi se nulovy ukazatel. Otevirani souboru se odjakteziva testuje na nulu a nevim, proc by tomu melo byt jinak. Schvalne si vygoogli "fopen test if file exists" ;)
Otevirani souboru se odjakteziva testuje na nulu a nevim, proc by tomu melo byt jinak.
Třeba proto, že když je to pointer, měl byste ho testovat na NULL
(pointer), ne na nulu (číslo). Nebo rovnou psát if (fp) ...
Standartem?Ne. Standardem. Ale mám to z druhé ruky, nedíval jsem se přímo do standardu.
NULL ani 0 v tomto kontextu neni ve skutecnosti nula, ale compiler to interne reprezentuje nejakou jinou binarni hodnotou.Citation needed.
Nikde ve standartech neni psano, ze musi preprezentovat NULL a 0 stejnou hodnotou, proto neni zaruceno, ze VZDY NULL === 0.Standardech. Dobře, tak se do nějakého toho draftu, co se dá vygooglit:
An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.55) If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.Zdroj (pdf).
MyType *var = 0;
místo MyType *var = NULL;
Ale v C není ((void *) 0) garantováno, mohlo by to být i třeba ((void *) 42)Tak ještě jednou cituji: An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant. Tedy, česky, výraz vyhodnocující na nulu (například konstanta 0), či stejný výraz přetypovaný na typ void * (tedy například (void *) 0) se nazývá nulovou pointerovou kontantou. Pokud by ti to nestačilo, tak o kousek níže nadeš: Any two null pointers shall compare equal. Čímž by mělo být prokázáno i tvrzení, johož zpochybněním George O. toto vlákno začal:
Ve skutecnosti je v C uplne jedno jestli porovnavas neco na NULL, nebo 0. :)Lepší „garanci“ než citaci z draftu bohužel momentálně nabídnout nemůžu.
(void *)0
.
1. V dotazu chybí podstatná informace: jestli ten soubor opravdu existuje - jako nejpravděpodobnější se mi jeví vysvětlení, že skutečně neexistuje.
2. Proč jste použil subject "Problem s mkfifo v C"? Ať se na to dívám, jak chci, pořád tam žádný problém s mkfifo()
nevidím, chybu dostáváte při otevření úplně jiného souboru a to, že jste předtím použil mkfifo()
s nějakou jinou cestou, na to nemá žádný vliv.
No jako podstatnou informaci jsem spise zapomnel uvest, ze ta vlnovka v kodu neni, ale je tam jmeno domovskeho adresare, ktere jsem nechtel prozrazovat.
Úžasné… ale zkuste se možná spíš vážně zamyslet nad tím, kdy je informace opravdu potřeba schovávat a kdy tím jen komplikujete práci tomu, kdo by mohl chtít odpovídat. U mne třeba obfuskování dotazu automaticky zvyšuje pravděpodobnost, že ho budu ignorovat.
pokud je mi znamo, i kdyby neexistoval, tak se vytvori
Jen pokud existuje adresář, ve kterém by se měl vytvořit. Navíc ta cesta, kterou tam máte, je relativní. Jste si jistý, že pracovní adresář je ten, který si myslíte? (je-li vlnka místo uživatelkého jména, tak nejspíš kořenový)
home/~/Documents/Vyvoj_C/ukol_4/fifo_log.txt
" by nefungovala expanze vlnky ani v shellu, takže celá ta cesta je krajně podezřelá.
fw = fopen("fifo_log.txt", "a+");Tak se vytvori soubor fifo_log.txt v aktualnim adresari (resp. u me v adresari s Eclipse projektem), ale nic se do nej nezapise. Cili jsou tu dve zahady: a) proc absolutni cesta nefunguje a relativni ano? b) proc se do osuboru nic nezapisuje,i kdyz by melo?
fw = fopen("/home/mujdomaciadresar/Documents/Vyvoj_C/ukol_4/fifo_log.txt", "a+");ad b) ano precte, do konzole (printf) to vypise. Nezapise se to ale do souboru (fprintf).
fflush(fw);
:)
open()
patří close()
, k fopen()
patří fclose()
, '-0' je zajímavá, ale testoval bych na (NOT) NULL
(vždy na to co se píše v dokumentaci).exit(x)
, ale už ne např. na na abort() nebo třeba Ctrl+C (není li odchyceno a ošetřeno). Nevím jestli je toto chování stejné napříč systémy, raději se o to starej sám.fclose()
se neošetřuje (někdy je to opravdu zbytečné), tak ji neposlouchej, protože až fclose()
říká, že systém zapsal data na disk (tedy z pohledu aplikace - může to být ještě v diskové cache systému). A když se to neošetřuje, tak sem tam nám někde vznikají ty neukončené soubory, byť nikdo se o chybě nedozvěděl (fclose()
data flush-ne, ale když to zklame, data na disku nejsou a aplikačka nic nehlásí - prostě ideální stav close(fp)fw potom:
fclose(fw)coz situaci nevyresilo. fflush, dobry, ale kam s nim? Nejlogictejsi, co me napadlo, je pred fprintf:
while(1) { l = read(fp, buf, 254); if(l) // print only if the read length is greater than 0 printf("%s", buf); fflush(fw); fprintf(fw, "%s", buf); for(i=0; i<255; i++) // initialize the whole buffer again buf[i] = '\0'; } close(fp); fclose(fw);jenze, zcela nelogicky a nemozne v okamziku pridani fflush zacal kod selhavat na fci open 20 radku pred fflush!
fp = open("/tmp/pb173_syslog", "r"); if(fp == -1) { printf("Could not open the pipe\n"); }vypisuje to:
"Could not open the pipe\nco se to jako deje? takhle se to vubec, ale vubec chovat nema, vzdyt je to imperativni program a fp neni s fflush(fw) preci nijak spojena. Kdyz ten fflush vykomentuju, tak to chyby nehodi. zkousel jsem to cca 10x a proste to ovlivnuje, i kdyz proste nemuze... taky bych poprosil toho, kdo oznacil toto vlakno jako vyresene, aby to zase odznavil, pac evidentne vyresene neni. Navic nevim, jak by fflush vyresil problem. Funkce fprintf proste musi zapsat do souboru to, co ma v poli buf. buf je naplneny, nic se z toho neztratilo.. ja to vazne nechapu...
fprintf(fw, "%s", buf); //write to file buffer fflush(fw); //flus the buffer to diskK tomu selhávaní, těžko říct, pokud si s tím hraješ a zestřeluješ to a pod. a v zásadě neuklízíš… Ale zkus (předem smaž, nebo použij jiné fifo):
fp = open("/tmp/pb173_syslog", O_RDONLY | O_NONBLOCK);
#include getopt.h #include stdio.h #include stdlib.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #define DEFAULT_INTERVAL 2 int main(int argc, char **argv) { int status; FILE *fw; int fp; char buf[255]; int l; // read length int i; buf[0] = '\0'; // in case there is nothing to read buf[255] = '\0'; // garentee a end-of-line status = mkfifo("/tmp/pb173_syslog", S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); if(status == -1) { perror( "Mkfifo failed" ); //exit(1); ; } /*Daemon reads the FIFO and writes into a text file*/ fp = open("/tmp/pb173_syslog", O_RDONLY | O_NONBLOCK); if(fp == -1) { printf("Could not open the pipe\n"); } fw = fopen("/home/tomesh/Documents/Vyvoj_C/ukol_4/fifo_log.txt", "a+"); if(fw == NULL) { perror( "Opening logfile" ); exit(1); ; } while(1) { l = read(fp, buf, 254); if(l) // print only if the read length is greater than 0 printf("%s", buf); fprintf(fw, "%s", buf); fflush(fw); for(i=0; i<255; i++) // initialize the whole buffer again buf[i] = '\0'; } close(fp); fclose(fw); exit(EXIT_SUCCESS); }
cat | dog
, tak sáhni po socketech (ať už unixových nebo síťových). S těmi není problém jednoduše a spolehlivě implementovat souběžnou komunikaci mezi mnoha prgramy.
#include <fcntl.h> int main(int argc, char **argv) { const char* fifof = "/tmp/pb173_syslog";holt musíš zapsat jako:
<pre class="brush: c"> #include <fcntl.h> int main(int argc, char **argv) { const char* fifof = "/tmp/pb173_syslog"; </pre>A to zvládne jen záměna
& –> & " –> " < –> < > –> ≶
#include <stdio.h> #include <sys/stat.h> #include <stdlib.h> #include <fcntl.h> int main(int argc, char **argv) { const char* fifof = "/tmp/pb173_syslog"; FILE *fw = NULL; int fp = 0; char buf[255]; buf[0] = buf[254] = '\0'; // in case there is nothing to read if(mkfifo(fifof, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH) != 0){ perror( "Mkfifo failed" ); //exit(1); ; } /*Daemon reads the FIFO and writes into a text file*/ if((fp = open(fifof, O_RDONLY | O_NONBLOCK)) == -1){ perror("Could not open the pipe\n"); exit(3); } if((fw = fopen("fifo_log.txt", "a+")) == NULL){ perror( "Opening logfile" ); close(fp); exit(1); ; } while(1) { if(read(fp, buf, 254) > 0) printf("%s", buf); fprintf(fw, "%s", buf); fflush(fw); int i; /* na začátku né a fčul jo? */ for(i=0; i<255; i++) // initialize the whole buffer again buf[i] = '\0'; } close(fp); fclose(fw); return 0; }Compile:
gcc kuk.c
./a.out
date > /tmp/pb173_syslog && sleep 1 && cat fifo_log.txt
Sice taky z pověrčivosti (a ze zvyku) testuji raději na "< 0
", ale
Další problém může být v tom, že open vrací chybu jako záporné číslo, ne jen -1.
V tom případě si stěžujte autorovi, že nerespektuje standardy. Viz open(3p)
:
RETURN VALUE
Upon successful completion, the function shall open the file and return a non-negative integer representing the lowest numbered unused file descriptor. Otherwise, -1 shall be returned and errno set to indicate the error. No files shall be created or modified if the function returns -1.
Tiskni
Sdílej: