Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

Ò»¸öÓÉsendfileÒý·¢µÄlinuxÄÚºËBUG

ÔÚÂÛ̳ÉÏ¿´µ½Ò»¸ö½²linuxÄÚºËBUGµÄÌû×Ó£¬ÀûÓÃÕâ¸öBUG£¬Ò»¸öÆÕͨÓû§Äܹ»ÔÚÔËÐÐij¸ö³ÌÐòÖ®ºó£¬»ñµÃrootȨÏÞ¡£
ʾÀýµÄ´úÂëÈçÏ£ºhttp://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz

ÔÚubuntu 9.04
£¬Äں˰汾2.6.28
.12
µÄ»úÆ÷ÉϲâÊÔͨ¹ý¡£


ÄÇô£¬Õ⾿¾¹ÊÇÔõÑùÒ»¸öBUG
ÄØ£¿Õâ¶Î´úÂëÓÖÊÇÔõÑùÀûÓÃÕâ¸öBUG
µÄÄØ£¿

ÔÚÍøÉÏÊÕ¼¯ÁËһЩÐÅÏ¢£¬²¢ÔĶÁÏà¹Ø²¿·ÖµÄÄں˴úÂëºó£¬ÕûÀíÈçÏ£º



Äں˵ÄBUG


Õâ¸öBUG
Ê×ÏȵôÓsendfile
ϵͳµ÷ÓÃ˵Æð¡£

¿¼Âǽ«Ò»¸ö±¾µØÎļþͨ¹ýsocket
·¢ËͳöÈ¥µÄÎÊÌâ¡£ÎÒÃÇͨ³£µÄ×ö·¨ÊÇ£º´ò¿ªÎÄ
¼þfd
ºÍÒ»¸ösocket
£¬È»ºóÑ­»·µØ´ÓÎÄ
¼þfd
ÖÐread
Êý¾Ý£¬²¢½«¶ÁÈ¡µÄÊý¾Ýsend
µ½socket
ÖС£ÕâÑù£¬Ã¿´Î¶ÁдÎÒÃǶ¼ÐèÒª
Á½´Îϵͳµ÷Ó㬲¢ÇÒÊý¾Ý»á±»´ÓÄں˿½±´µ½Óû§¿Õ¼ä(read)
£¬ÔÙ´ÓÓû§¿Õ¼ä¿½±´µ½ÄÚºË(send)
¡£¶øsendfile
¾Í½«Õû¸ö·¢Ë͹ý³Ì·â
×°ÔÚÒ»¸öϵͳµ÷ÓÃÖУ¬±ÜÃâÁ˶à´Îϵͳµ÷Ó㬱ÜÃâÁËÊý¾ÝÔÚÄں˿ռäºÍÓû§¿Õ¼äÖ®¼äµÄ´óÁ¿¿½±´¡£

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);


ËäÈ»Õâ¸öϵͳµ÷ÓýÓÊÕin
ºÍout
Á½
¸öfd
£¬µ«ÊÇÓÐËùÏÞÖÆ£¬in
Ö»ÄÜÊÇÆÕͨÎÄ
¼þ£¬out
Ö»ÄÜÊÇsocket
£¨Õâ¸öÏÞÖÆ²»
ÖªµÀºóÀ´µÄÄں˰汾ÓÐûÓÐ·Å¿í£©¡£

sendfile
ϵͳµ÷ÓÃÔÚÄÚºËÀïÃæÊÇÔõôʵÏÖµÄÄØ£¿Õâ¸ö»¹ÊDZȽϸ´ÔÓ£¬ËüÔÚÄÚºËÀïÃæ×öÁËÔ­À´ÒªÔÚÓû§Ì¬×öµÄÊÂÇ飺´´½¨Ò»¸öpipe
¶ÔÏó×÷buffer
ÓᢴÓin_fd
ÖжÁÊý¾Ýµ½pipe
ÖС¢½«pipe
ÖеÄÊý¾Ýдµ½out_fd
¡¢Ñ­»·Ö±µ½Âú×ã½áÊøÌõ
¼þ¡£

¹ØÓÚдÊý¾Ýµ½out_fd
µÄ¹ý³Ì£¬¼òÒªÃèÊöÈçÏ£º
sys_sendfile
=>
Èë
¿Ú
do_sendfile
=>
²Î
Êý¼ì²é£¬ÆäÖлáÈ·¶¨out_fd
¶ÔÓ¦µÄfile
½á
¹¹°üº¬sendfile
·½·¨(out_file->f_op->sendpage)
do_splice_direct
=>
×î
ÖÕµ÷Óõ½out_file->f_op->splice_write
£¬¶øout_file
ÊǸösocket
£¬ËüµÄf_op->splice_write
µÈÓÚgeneric_splice_sendpage
generic_splice_sendpage
=>

×îÖÕµ÷Óõ½out_file->f_op->sendpage
£¬Õâ¸ösendpage
µÈÓÚsock_sendpage

sock_sendpage
µÄ´úÂëÈçÏ£º

struct socket *sock;
int flags;
sock = file->private_data;
flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
if (more)


Ïà¹ØÎĵµ£º

CassandraÔÚLinuxϵÄÅäÖÃ

CassandraÊÇÒ»¸ö¿ªÔ´µÄ·Ö²¼Ê½Key-Value´æ´¢ÏµÍ³£¬Ö÷ÒªÓÃÓÚFacebook¡¢Digg¡¢TwitterµÈ´óÐÍ´óÊý¾ÝÁ¿µÄÍøÕ¾£¬ÏÖÔÚÒѾ­³ÉΪApacheµÄ¶¥¼¶ÏîÄ¿¡£
ÐèÒªÏȰ²×°Java 1.6ÒÔÉϰ汾ºÍThrift¡£
ÏÂÔØCassandra£º
1.wget http://www.apache.org/dyn/closer.cgi?path=/cassandra/0.6.0/apache-cassandra-0.6.0-bin.tar.gz
½âѹËõ£º
2.t ......

LinuxÖкǫ́ÃüÁîµÄÖ´ÐÐ

LinuxÖжÔÓÚһЩ´óÈÎÎñÐèÒªÔÚºǫ́ÔËÐУ¬·ñÔò»áÒ»Ö±Õ¼ÓÃÆÁÄ»£¬·À°­Ê¹ÓÃÕßʹÓÃÖÕ¶ËÈ¥Íê³ÉÆäËüµÄÈÎÎñ¡£ÆäÖлáÌṩÈçϼ¸¸öÃüÁîÀ´½øÐкǫִ́ÐУº
1¡¢  ÉèÖÃcrontabÎļþ£¬²¢ÓÃËüÀ´Ìá½»×÷Òµ£»ÆäÖÐcron ϵͳµ÷¶È½ø³Ì£¬¿ÉÒÔʹÓÃËüÔÚÿÌìµÄ·Ç¸ß·å¸ººÉʱ¼ä¶ÎÔËÐÐ×÷Òµ£¬»òÔÚÒ»ÖÜ»òÒ»ÔÂÖеIJ»Í¬Ê±¶ÎÔËÐС£
2¡¢  ʹÓÃatÃüÁîÀ ......

´´½¨linuxµÄ·þÎñ³ÌÐò

´´½¨linux·þÎñ£¬Ê¹µÃtest client¿ÉÒÔ¿ª»úÆô¶¯£¬²½ÖèÈçÏ£º
 
1.´´½¨Ä¿Â¼/usr/local/test/
2.¸´ÖÆtestcµ½/usr/local/test/
3.±àдÎļþ/etc/init.d/testc.sh
testc.sh
--------------------begin(not included)-----------------------
 
#! /bin/sh
#
### BEGIN INIT INFO
# Provides:  &nbs ......

linux api±Ê¼Ç£¨1£©£ºÅжÏÎļþÊÇ·ñ´æÔÚ

Èç¹ûÔÚlinux C\C++»·¾³ÏÂÅжÏij¸öÎļþÊÇ·ñ´æÔÚ£¬¿ÉÒÔʹÓÃaccessº¯Êý£º
#include <unistd.h>
#include <stdio.h>
int main()
{
        const char* file1 = "access.cpp";
        const char* file2 = "access1.cpp";
       & ......

LinuxÏ»ñÈ¡»úÆ÷ÐÔÄÜ

×¢Òâ¸Ã·½·¨ÊǼÆËãµÄ×Ô¿ª»úÒÔÀ´µÄʹÓÃÂÊ£¬ÊÇÒ»¸öÈ«¾ÖµÄ£¬Ã»¶à´óÒâÒ壬ÿһ´Î¼ÆËãCPUÀûÓÃÂÊ = 100 *£¨user + nice + system£©/£¨user + nice + system + idle£© ÕâÀïÒª¼õÈ¥Ò»¶¨Ê±¼äÒÔǰ·½¿É¼ÆËã³öÕâÒ»¶Îʱ¼äÄÚµÄcpuʹÓÃÂÊ¡£ "procÎļþϵͳÊÇÒ»¸öαÎļþϵͳ£¬ËüÖ»´æÔÚÄÚ´æµ±ÖУ¬¶ø²»Õ¼ÓÃÍâ´æ¿Õ¼ä¡£ËüÒÔÎļþϵͳµÄ·½Ê½Îª·ÃÎÊÏµÍ ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ