* system hang when running a kernel module program invloving file operations and exchange of arrary of character
@ 2003-04-19 17:24 George Chang
0 siblings, 0 replies; only message in thread
From: George Chang @ 2003-04-19 17:24 UTC (permalink / raw)
To: linux-kernel
Dear all
I loads the following code into kerenel as a module. The system hangs. I
dont know what's wrong. I guess the segmentation fault exists and array of
characters cause memory crash. Anyone has an idea? Thanks
Here is the code of the program
//RCFCOMM
static char RFCOMM[]="/usr/csm/log/rfcomm.log";
static char RFCOMM_sys[]="/usr/csm/log/rfcomm/sys.log";
static char RFCOMM_err[]="/usr/csm/log/rfcomm/err.log";
static char RFCOMM_ctrl[]="/usr/csm/log/rfcomm/ctrl.log";
static char RFCOMM_rec[]="/usr/csm/log/rfcomm/rec.log";
static char RFCOMM_warn[]="/usr/csm/log/rfcomm/warn.log";
static char RFCOMM_snd[]="/usr/csm/log/rfcomm/snd.log";
//SDP
static char SDP[]="/usr/csm/log/sdp.log";
static char SDP_sys[]="/usr/csm/log/sdp/sys.log";
static char SDP_err[]="/usr/csm/log/sdp/err.log";
static char SDP_ctrl[]="/usr/csm/log/sdp/ctrl.log";
static char SDP_rec[]="/usr/csm/log/sdp/rec.log";
static char SDP_warn[]="/usr/csm/log/sdp/warn.log";
static char SDP_snd[]="/usr/csm/log/sdp/snd.log";
//L2CAP
static char L2CAP[]="/usr/csm/log/l2cap.log";
static char L2CAP_sys[]="/usr/csm/log/l2cap/sys.log";
static char L2CAP_err[]="/usr/csm/log/l2cap/err.log";
static char L2CAP_ctrl[]="/usr/csm/log/l2cap/ctrl.log";
static char L2CAP_rec[]="/usr/csm/log/l2cap/rec.log";
static char L2CAP_warn[]="/usr/csm/log/l2cap/warn.log";
static char L2CAP_snd[]="/usr/csm/log/l2cap/snd.log";
//LMP
static char LMP[]="/usr/csm/log/lmp.log";
static char LMP_sys[]="/usr/csm/log/lmp/sys.log";
static char LMP_err[]="/usr/csm/log/lmp/err.log";
static char LMP_ctrl[]="/usr/csm/log/lmp/ctrl.log";
static char LMP_rec[]="/usr/csm/log/lmp/rec.log";
static char LMP_warn[]="/usr/csm/log/lmp/warn.log";
static char LMP_snd[]="/usr/csm/log/lmp/snd.log";
//MISC
static char MISC[]="/usr/csm/log/misc.log";
static char MISC_sys[]="/usr/csm/log/misc/sys.log";
static char MISC_err[]="/usr/csm/log/misc/err.log";
static char MISC_ctrl[]="/usr/csm/log/misc/ctrl.log";
static char MISC_rec[]="/usr/csm/log/misc/rec.log";
static char MISC_warn[]="/usr/csm/log/misc/warn.log";
static char MISC_snd[]="/usr/csm/log/misc/snd.log";
void _csm_evtlogger(char *evtno, const char *rem) {
int retval,orgfsuid,orgfsgid,fd,fd2,fd3,temp;
mm_segment_t orgfs;
static u8 buffer[5];
static u8 buf[2];
static u8* src = "/usr/csm/errtab.txt";
int i = 0;
//int k = 0;
static u8 globall[30]; // global log
static u8 subl[30]; // sub log
// make the time stamp for event log
unsigned int year=0,mon=0, day=0, hour=0, min=0, sec=0;
static u8 cyear[4];
static u8 cmon[2];
static u8 cday[2];
static u8 chour[2];
static u8 cmin[2];
static u8 csec[2];
if ((rem == NULL) || (evtno == NULL)) {
printk("1 CSM Error: Null remark");
return;
}
if (evtno[0] == '1') {
sprintf(globall,"%s", RFCOMM);
if (evtno[1] == '1') {
sprintf(subl, "%s", RFCOMM_sys);
}
else if (evtno[1] == '2') {
sprintf(subl, "%s", RFCOMM_err);
}
else if (evtno[1] == '3') {
sprintf(subl, "%s", RFCOMM_ctrl);
}
else if (evtno[1] == '4') {
sprintf(subl, "%s", RFCOMM_rec);
}
else if (evtno[1] == '5') {
sprintf(subl, "%s", RFCOMM_warn);
}
else if (evtno[1] == '6') {
sprintf(subl, "%s", RFCOMM_snd);
}
}
else if (evtno[0] == '2') {
sprintf(globall, "%s", SDP);
if (evtno[1] == '1') {
sprintf(subl, "%s", SDP_sys);
}
else if (evtno[1] == '2') {
sprintf(subl, "%s", SDP_err);
}
else if (evtno[1] == '3') {
sprintf(subl, "%s", SDP_ctrl);
}
else if (evtno[1] == '4') {
sprintf(subl, "%s", SDP_rec);
}
else if (evtno[1] == '5') {
sprintf(subl, "%s", SDP_warn);
}
else if (evtno[1] == '6') {
sprintf(subl, "%s", SDP_snd);
}
}
else if (evtno[0] == '3') {
sprintf(globall, "%s", L2CAP);
if (evtno[1] == '1') {
sprintf(subl, "%s", L2CAP_sys);
}
else if (evtno[1] == '2') {
sprintf(subl, "%s", L2CAP_err);
}
else if (evtno[1] == '3') {
sprintf(subl, "%s", L2CAP_ctrl);
}
else if (evtno[1] == '4') {
sprintf(subl, "%s", L2CAP_rec);
}
else if (evtno[1] == '5') {
sprintf(subl, "%s", L2CAP_warn);
}
else if (evtno[1] == '6') {
sprintf(subl, "%s", L2CAP_snd);
}
}
else if (evtno[0] == '4') {
sprintf(globall, "%s", LMP);
if (evtno[1] == '1') {
sprintf(subl, "%s", LMP_sys);
}
else if (evtno[1] == '2') {
sprintf(subl, "%s", LMP_err);
}
else if (evtno[1] == '3') {
sprintf(subl, "%s", LMP_ctrl);
}
else if (evtno[1] == '4') {
sprintf(subl, "%s", LMP_rec);
}
else if (evtno[1] == '5') {
sprintf(subl, "%s", LMP_warn);
}
else if (evtno[1] == '6') {
sprintf(subl, "%s", LMP_snd);
}
}
else if (evtno[0] == '5') {
sprintf(globall, "%s", MISC);
if (evtno[1] == '1') {
sprintf(subl, "%s", MISC_sys);
}
else if (evtno[1] == '2') {
sprintf(subl, "%s", MISC_err);
}
else if (evtno[1] == '3') {
sprintf(subl, "%s", MISC_ctrl);
}
else if (evtno[1] == '4') {
sprintf(subl, "%s", MISC_rec);
}
else if (evtno[1] == '5') {
sprintf(subl, "%s", MISC_warn);
}
else if (evtno[1] == '6') {
sprintf(subl, "%s", MISC_snd);
}
}
// get date & time from CMOS
sec = CMOS_READ(RTC_SECONDS);
min = CMOS_READ(RTC_MINUTES);
hour = CMOS_READ(RTC_HOURS);
day = CMOS_READ(RTC_DAY_OF_MONTH);
mon = CMOS_READ(RTC_MONTH);
year = CMOS_READ(RTC_YEAR);
// change to human-readable format
BCD_TO_BIN(sec);
BCD_TO_BIN(min);
BCD_TO_BIN(hour);
BCD_TO_BIN(day);
BCD_TO_BIN(mon);
BCD_TO_BIN(year);
// as for year 2003, return 3. So check if there is a need to re-format
if ((year += 1900) < 1970)
year += 100;
sprintf(cyear,"%d",year);
// manipulate date & time variables into the forms of character
if (mon < 10)
sprintf(cmon,"0%d",mon);
else
sprintf(cmon,"%d",mon);
if (day < 10)
sprintf(cday,"0%d",day);
else
sprintf(cday,"%d",day);
if (hour < 10)
sprintf(chour,"0%d",hour);
else
sprintf(chour,"%d",hour);
if (min < 10)
sprintf(cmin,"0%d",min);
else
sprintf(cmin,"%d",min);
if (sec < 10)
sprintf(csec,"0%d",sec);
else
sprintf(csec,"%d",sec);
//sprintf(datetime, "%s/%s/%d %s:%s:%s ",cmon,cday,year,chour,cmin,csec);
// Save uid and gid used for filesystem access.
// Set user and group to 0 (root)
orgfsuid=current->fsuid;
orgfsgid=current->fsgid;
current->fsuid=current->fsgid=0;
// save FS register and set FS register to kernel
// space, needed for read and write to accept
// buffer in kernel space.
orgfs=get_fs();
set_fs(KERNEL_DS);
if ((buffer != NULL) && (buf != NULL)) {
if (((fd = sys_open(src, O_RDONLY, 0)) > 0) && ((fd2 =
sys_open(globall,O_WRONLY|O_CREAT|O_APPEND, 0644)) > 0) && ((fd3 =
sys_open(subl,O_WRONLY|O_CREAT|O_APPEND, 0644)) > 0)){
do {
retval = sys_read(fd, buffer, 5);
/*if (buffer != NULL)
printk("2 Evtno : %s\n", buffer);
else {
printk("2 Read NULL at evtno (file)\n");
return;
}*/
if (retval < 0)
printk("Read error %d\n",-retval);
if (retval > 0) {
if (strncmp(buffer,evtno,5) == 0) {
// get the comment from the error table (errtab.txt)
retval = sys_write(fd2, cmon, 2);
retval = sys_write(fd2, "/", 1);
retval = sys_write(fd2, cday, 2);
retval = sys_write(fd2, "/", 1);
retval = sys_write(fd2, cyear, 4);
retval = sys_write(fd2, " ", 1);
retval = sys_write(fd2, chour, 2);
retval = sys_write(fd2, ":", 1);
retval = sys_write(fd2, cmin, 2);
retval = sys_write(fd2, ":", 1);
retval = sys_write(fd2, csec, 2);
retval = sys_write(fd2, " ", 1);
retval = sys_write(fd3, cmon, 2);
retval = sys_write(fd3, "/", 1);
retval = sys_write(fd3, cday, 2);
retval = sys_write(fd3, "/", 1);
retval = sys_write(fd3, cyear, 4);
retval = sys_write(fd3, " ", 1);
retval = sys_write(fd3, chour, 2);
retval = sys_write(fd3, ":", 1);
retval = sys_write(fd3, cmin, 2);
retval = sys_write(fd3, ":", 1);
retval = sys_write(fd3, csec, 2);
retval = sys_write(fd3, " ", 1);
i = 0;
do {
retval = sys_read(fd, buf, 2);
//printk("%c",buffer[0]);
if ((buf[0] != '\n') && (buf[1] != '\n')) {
//printk("%s",buf);
if ((retval = sys_write(fd2, buf,2)) < 0)
printk("Write error!");
if ((retval = sys_write(fd3, buf,2)) < 0)
printk("Write error!");
}
else if (buf[0] != '\n') {
//printk("%c",buf[0]);
if ((retval = sys_write(fd2, buf,1)) < 0)
printk("Write error!");
if ((retval = sys_write(fd3, buf,1)) < 0)
printk("Write error!");
}
} while ((buf[0] != '\n') && (buf[1] != '\n'));
if ((retval = sys_write(fd2, " ",1)) < 0)
printk("Write error!");
if ((retval = sys_write(fd2, rem,_sizeof(rem))) < 0)
printk("Write error!");
if ((retval = sys_write(fd2, "\n",1)) < 0)
printk("Write error!");
if ((retval = sys_write(fd3, " ",1)) < 0)
printk("Write error!");
if ((retval = sys_write(fd3, rem,_sizeof(rem))) < 0)
printk("Write error!");
if ((retval = sys_write(fd3, "\n",1)) < 0)
printk("Write error!");
retval = -1; // stop reading file
}
else {
do {
retval = sys_read(fd, buf, 1);
} while (buf[0] != '\n');
}
}
} while (retval > 0);
//printk("Buffer : %s\n",buffer);
temp = sys_close(fd);
temp = sys_close(fd2);
temp = sys_close(fd3);
}
else
printk("fd <= 0\n");
}
else {
printk("Null Pointer for Buffer\n");
return;
}
set_fs(orgfs);
current->fsuid=orgfsuid;
current->fsgid=orgfsgid;
}
Best Regards,
George Chang
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-04-19 17:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-04-19 17:24 system hang when running a kernel module program invloving file operations and exchange of arrary of character George Chang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.