/dev/mem (was: SucKIT)
Jirka Kosina
jikos na jikos.cz
Čtvrtek Březen 28 12:41:09 CET 2002
On Thu, 28 Mar 2002, Karel Zak wrote:
> > > Proc potrebuje nejaky program _celou_ pamet kernelu? Nebylo by
> > > cistejsi mit nejake blize specifikovane API?
> > Mozna bylo. Ale problem je v tom, ze se to pouziva pro primy pristup
> > k hw zarizenim (napr. graficke karte), a lepsi zarizeni (jak napr. lepsi
> > graficke karty) vetsinou umi nejake DMA a podobne veci, takze ten, kdo
> > chce skodit, si stejne pristup ke zbytku fyzicke pameti zaridi.
> Snad by bylo v silach jadra hlidat kam v tech souborech (pameti) kdo
> leze (pise) a nektere casti napr. sys_call_table ohodnotit SIGKILL
> pro dany program. Nevim do jadra nedelam...
No, zmenu sys_call_table pres /dev/kmem by snad melo jit chytit nejak
trivialne takhle, ne?
--- ./kernel.orig/drivers/char/mem.c Fri Dec 21 18:41:54 2001
+++ ./kernel/drivers/char/mem.c Thu Mar 28 12:35:05 2002
@@ -21,6 +21,7 @@
#include <linux/raw.h>
#include <linux/tty.h>
#include <linux/capability.h>
+#include <linux/sys.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -41,7 +42,9 @@
#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_CHAR)
extern void tapechar_init(void);
#endif
-
+
+extern void *sys_call_table;
+
static ssize_t do_write_mem(struct file * file, void *p, unsigned long
realp,
const char * buf, size_t count, loff_t *ppos)
{
@@ -119,6 +122,7 @@
return 0;
if (count > end_mem - p)
count = end_mem - p;
+ if (p >= sys_call_table && p <= sys_call_table + (NR_syscalls*4))
return -EPERM;
return do_write_mem(file, __va(p), p, buf, count, ppos);
Nejsem si jisty, jestli SuckKIT nedela to, ze v IDT misto toho rovnou
premlaskne celou obsluhu interruptu 0x80 nekam na svuj handler...
> Problem veci jako je SickKIT je, ze v idelanim pripade, ze ten kit
> neopsahuje zadny bug tak ho nemuzete detekovat.
Ale lze zabranit jeho natazeni.
--
JiKos.
Další informace o konferenci Linux