Příspěvek na blogu Ubuntu upozorňuje na několik zranitelností v rozšíření Linuxu o mandatorní řízení přístupu AppArmor. Společně jsou označovány jako CrackArmor. Objevila je společnost Qualys (technické detaily). Neprivilegovaný lokální uživatel se může stát rootem. Chyba existuje od roku 2017. Doporučuje se okamžitá aktualizace. Problém se týká Ubuntu, Debianu nebo SUSE. Red Hat nebo Fedora pro mandatorní řízení přístupu používají SELinux.
Byla vydána nová verze 19 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v changelogu.
Bitwig Studio (Wikipedie) bylo vydáno ve verzi 6. Jedná se o proprietární multiplatformní (macOS, Windows, Linux) digitální pracovní stanici pro práci s audiem (DAW).
Společnost Igalia představila novou linuxovou distribuci (framework) s názvem Moonforge. Jedná se o distribuci určenou pro vestavěné systémy. Vychází z projektů Yocto a OpenEmbedded.
Google Chrome 146 byl prohlášen za stabilní. Nejnovější stabilní verze 146.0.7680.71 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 29 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
D7VK byl vydán ve verzi 1.5. Jedná se o fork DXVK implementující překlad volání Direct3D 3 (novinka), 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.
Bylo vydáno Eclipse IDE 2026-03 aneb Eclipse 4.39. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Ze systému Slavia pojišťovny uniklo přibližně 150 gigabajtů citlivých dat. Jedná se například o pojistné dokumenty, lékařské záznamy nebo přímou komunikaci s klienty. Za únik může chyba dodavatelské společnosti.
Sněmovna propustila do dalšího kola projednávání vládní návrh zákona o digitální ekonomice, který má přinést bezpečnější on-line prostředí. Reaguje na evropské nařízení DSA o digitálních službách a upravuje třeba pravidla pro on-line tržiště nebo sociální sítě a má i víc chránit děti.
Meta převezme sociální síť pro umělou inteligenci (AI) Moltbook. Tvůrci Moltbooku – Matt Schlicht a Ben Parr – se díky dohodě stanou součástí Meta Superintelligence Labs (MSL). Meta MSL založila s cílem sjednotit své aktivity na poli AI a vyvinout takovou umělou inteligenci, která překoná lidské schopnosti v mnoha oblastech. Fungovat by měla ne jako centralizovaný nástroj, ale jako osobní asistent pro každého uživatele.
class Thread{
private:
pthread_t m_tHandle;
unsigned int m_nStatus;
Mutex m_tMutex;
public:
enum Status{
NotRunning = 0,
Running = 1,
Suspended = 2,
Zombie = 3
};
Thread();
virtual ~Thread();
void run();
void kill();
void wait();
pthread_t handle() const { return m_tHandle; };
void handle( pthread_t handle ) { m_tHandle = handle; }
void lock() { m_tMutex.lock(); }
void unlock(){ m_tMutex.unlock(); }
bool tryLock(){ return m_tMutex.tryLock(); }
void status( unsigned int status );
unsigned int status() const { return m_nStatus; }
virtual void start();
virtual void stop();
static void waitForAll();
};
static void *entry_point(void *thread_)
{
Thread* thread = reinterpret_cast<Thread*>(thread_);
signal(SIGQUIT, signal_handler_SIGQUIT);
thread_list_mutex.lock();
thread_list.insert( std::make_pair(pthread_self(), thread) );
thread_list_mutex.unlock();
thread->handle(pthread_self());
thread->start();
thread->stop();
thread->status(Thread::Zombie);
pthread_exit(NULL);
return NULL;
}
void Thread::run()
{
if( status() == NotRunning )
{
label_create:
status(Running);
pthread_create(&m_tHandle, NULL, &entry_point, this);
}
else if( status() == Zombie ){
wait();
goto label_create;
}
}
Ve funkci static void *entry_point(void *thread_) volám thread->start(). Problém je, že se vždy zavolá metoda start() třídy Thread a né metoda odvozené třídy MujThread:
class MujThread: public Thread{
public:
MujThread(){}
virtual ~MujThread(){}
virtual void start()
{
printf("MujThread start()\n");
while(true);
}
virtual void stop()
{
printf("MujThread stop()\n");
}
};
(Thread*)thread_, bezúspěšně. Vím ale, že ten kód ještě nedávno fungoval. Pomalu bych řekl, že přestal fungovat po aktualizaci gcc.
pure virtual method called terminate called without an active exception ./testutk: line 4: 6543 Neúspěšně ukončen (SIGABRT)
Nemáte dohromady ty verze GCC smíchané (že by kus kódu byl zkompilovaný se starou verzí)?
make clean.
MujThread::start() nedávat jako inline. Kompilátor by sice měl být dost chytrý, aby buď ignoroval evidentní chybu programátora, nebo protestoval, jenže právě to ignorování chyby lze provést dvěma způsoby: buď bude ignorovat virtual nebo inline (zde implicitní). Musel bych se podívat, co v takové situaci předepisuje specifikace jazyka, ale v každém případě bude jistější nepožadovat po překladači něco, co je principiálně nemožné.
MujThred::start() jako inline, nefunguje to. Mám jinou třídu (Application):
class Application{
....
public:
....
virtual bool onInit() { return true; }
virtual void onQuit() {}
....
};
Od té odvozuji TestApplication:
class TestApplication: public Application{
protected:
MujThread t;
public:
virtual bool onInit()
{
...
t.run();
return true;
}
virtual void onQuit()
{
t.kill();
}
};
Zde však volání virtuálních metod funguje správně, což popírá vaši domněnku. (Už jste viděl zdrojový kód Qt knihovny? Je tam toho plno.) Problém bude nejspíš jinde. A jak říkám výše, ten kód fungoval naprosto bezchybně, když jsem ho před časem použil (ale na jiné distribuci, s jiným kernelem - 2.6.17, teď 2.6.18 - a s trochu nižší verzí GCC).
Thread::run() (viz. kód výše), konkrétně se zavolá po vytvoření nového vlákna: pthread_create(&m_tHandle, NULL, &entry_point, this).
Tiskni
Sdílej: