Fix a potentially dangerous bug with bootloader installation for Sansas:

check the downloaded bootloader file against the target reported by sansapatcher as otherwise one could install an e200 bootloader to a c200 (and vice versa).


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20630 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Riebeling 2009-04-05 19:19:27 +00:00
parent afc78cc329
commit 9def6b2345

View file

@ -122,9 +122,26 @@ void BootloaderInstallSansa::installStage2(void)
return;
}
// check model -- if sansapatcher reports a c200 don't install an e200
// bootloader and vice versa.
// The model is available in the mi4 file at offset 0x1fc and matches
// the targetname set by sansapatcher.
emit logItem(tr("Checking downloaded bootloader"), LOGINFO);
m_tempfile.open();
QString blfile = m_tempfile.fileName();
char magic[4];
m_tempfile.seek(0x1fc);
m_tempfile.read(magic, 4);
m_tempfile.close();
if(memcmp(sansa.targetname, magic, 4) != 0) {
emit logItem(tr("Bootloader mismatch! Aborting."), LOGERROR);
qDebug("[BL-Sansa] Targetname: %s, mi4 magic: %c%c%c%c",
sansa.targetname, magic[0], magic[1], magic[2], magic[3]);
emit done(true);
sansa_close(&sansa);
return;
}
if(sansa_add_bootloader(&sansa, blfile.toLatin1().data(),
FILETYPE_MI4) == 0) {
emit logItem(tr("Successfully installed bootloader"), LOGOK);