From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JaIPw-0000eZ-CZ for qemu-devel@nongnu.org; Fri, 14 Mar 2008 18:30:24 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JaIPt-0000eG-VS for qemu-devel@nongnu.org; Fri, 14 Mar 2008 18:30:23 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JaIPt-0000eB-PL for qemu-devel@nongnu.org; Fri, 14 Mar 2008 18:30:21 -0400 Received: from vs165240.vserver.de ([62.75.165.240]) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JaIPs-0003Fx-IH for qemu-devel@nongnu.org; Fri, 14 Mar 2008 18:30:22 -0400 Received: from p57a6bc53.dip.t-dialin.net ([87.166.188.83] helo=[192.168.0.10]) by vs165240.vserver.de with esmtpsa (TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32) (Exim 4.50) id 1JaHde-0004dm-Ch for qemu-devel@nongnu.org; Fri, 14 Mar 2008 21:40:36 +0000 Message-ID: <47DAF0CC.4070806@nurnware.de> Date: Fri, 14 Mar 2008 22:40:28 +0100 From: =?ISO-8859-15?Q?Stefan_N=FCrnberger?= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090006010904000603030307" Subject: [Qemu-devel] Bug with 32-bit segmentation Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------090006010904000603030307 Content-Type: multipart/alternative; boundary="------------020509030009000707070404" --------------020509030009000707070404 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Hi, before talking about the bad things, I have to remark, that qemu is a great program. I like it for it's simplicity and I cherish the integrated gdb-stub, wich avoided a lot of headaches in my early kernel-develpment phase, when no own serial debugger stub existed. And secondly, I hope this is the right place to post bug reports, but I couldn't find an appropriate place. The forum seemed more "user oriented". Unfortunately I encountered a little error when experimenting with segmentation. I'm talking about the x86 version of qemu (0.9.1 soft-mmu). I set up a code segment in the GDT from 0x00000000 to 0x1ffffffff. The data segment ranges from 0x00000000 to 0xbfffcfff. All the stack for instance is allocated behind 0x20000000 - thus after the code segment. Then I tried to execute the stack, to test some security features that this segmentation model should provide in spite of lacking a hardware NX-bit for example. But unfortunately a "jmp"-instruction to an address > 0x1fffffff didn't raise a #GPF, wich shouldn't be possible, I think. I also tested the code on real hardware (AMD Athlon 64, Athlon XP) as well as in VMware. On the these three machines it worked correctly - so, as expected. This error doesn't always occur. Sometimes I get the "wanted" #GPF in qemu, but - as I already said - sometimes not. To investigate I did the following: I modified the demo program to execute the intentionally stored instructions on the stack several times in a for-loop (see the attached file for details). The #GPF I was waiting for then raised after executing the stack the 47th time, the 582th or the 200th time...etc. No real pattern. But sometimes, as wanted and expected, the first time. Another thing that's strange about this, is, that a GPF will be raised correctly when stepping through the code via the integrated gdb-stub of qemu and an attached gdb. So there wasn't really a way to determine why it wouldn't work. I've also attached a screenshot showing the "show registers" on the qemu console. As you can see the EIP is > GDT[CS]. BTW. don't worry abount the includes in the attached c-file. This file is designed for another OS. But this this shouldn't matter as it's only to get an impression of the code. If you have any further questions, feel free to cantact me. Best regards, Stefan --------------020509030009000707070404 Content-Type: text/html; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Hi,

before talking about the bad things, I have to remark, that qemu is a great program. I like it for it's simplicity and I cherish the integrated gdb-stub, wich avoided a lot of headaches in my early kernel-develpment phase, when no own serial debugger stub existed. And secondly, I hope this is the right place to post bug reports, but I couldn't find an appropriate place. The forum seemed more "user oriented".
Unfortunately I encountered a little error when experimenting with segmentation. I'm talking about the x86 version of qemu (0.9.1 soft-mmu).
I set up a code segment in the GDT from 0x00000000 to 0x1ffffffff. The data segment ranges from 0x00000000 to 0xbfffcfff. All the stack for instance is allocated behind 0x20000000 - thus after the code segment. Then I tried to execute the stack, to test some security features that this segmentation model should provide in spite of lacking a hardware NX-bit for example. But unfortunately a "jmp"-instruction to an address > 0x1fffffff didn't raise a #GPF, wich shouldn't be possible, I think. I also tested the code on real hardware (AMD Athlon 64, Athlon XP) as well as in VMware. On the these three machines it worked correctly - so, as expected.
This error doesn't always occur. Sometimes I get the "wanted" #GPF in qemu, but - as I already said - sometimes not. To investigate I did the following: I modified the demo program to execute the intentionally stored instructions on the stack several times in a for-loop (see the attached file for details). The #GPF I was waiting for then raised after executing the stack the 47th time, the 582th or the 200th time...etc. No real pattern. But sometimes, as wanted and expected, the first time. Another thing that's strange about this, is, that a GPF will be raised correctly when stepping through the code via the integrated gdb-stub of qemu and an attached gdb. So there wasn't really a way to determine why it wouldn't work.
I've also attached a screenshot showing the "show registers" on the qemu console. As you can see the EIP is > GDT[CS].
BTW. don't worry abount the includes in the attached c-file. This file is designed for another OS. But this this shouldn't matter as it's only to get an impression of the code.

If you have any further questions, feel free to cantact me.
Best regards,
Stefan
--------------020509030009000707070404-- --------------090006010904000603030307 Content-Type: image/png; name="qemu_maybe_error.png" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="qemu_maybe_error.png" iVBORw0KGgoAAAANSUhEUgAAAtgAAAGrCAYAAAD6jeD3AAAAAXNSR0IArs4c6QAAIABJREFU eNrt3XucnFd95/lvVfX9qmp1q2VZktuS7faVMfbYjW2wARPIcDE2oOYSRhnNssNk2FcyDJPX DLvKzmtntcmS2cnuMISQCyjTeCBugceYJBDascHGAcXhamwj2wIZ32hJ9qP7pbura/9oV6u6 +rmc51bPpT7v18svUP+qnjp1znOe86unTp1TsCyrKgAAAAC+lcvlQuPf2uweuHNqL7UFAAAA eKjdrK5PtNsaE+v+8og2XHSlBobWUWMAAACAg2MvH9QnvvozHbcOybKsai3JbqtProc3blF5 3UZJUmVhgVoDAAAAHPQODKl3YEidvf3aObV3OcleTrD7yyMaWDuqSmVekvTIPZ9W55GnNDg4 qIWFBS1uulEXv+atri9y6MDjevb+P9apns167fs+Rq0DAAAgtHse3q/5k5bv57X3lnX7TVsd 4z//H1/SzU/c5fu4D172Xl14x3uW/z2wdlRnTx5f/nebtHT3ujy6SYt1d62vvPUDevKrf6B3 3vZ2lUol/eXX/kaHntmitedfZPtCZ04c0cKT31C12Kmrbn3/imMBAAAAQdy79xnNn7S0detW 38/dv3+/7nl4v26buGBV7Jmv3qObn7hL24IU6om79KCkC95x+7mkuqNr+S728h3svvLa5bvX Sw/q1Pob3qcvTn9er7nuGo1ftEV/+8Dn1P3Of6vOnv6GV6nqmYfuVPfCEZWvfod6BsorjgUA AAAEUTl5WBdv3Sqp4vu5F28d0/79+1WpbFgVu/GxL+o2SWcDlOk2SQuPfVG/eOvbVJ9LW7PP LuXRy4W3ueM8uG6TDm+4Xo888h0NDw9r87pB/fgv/1ivvuO3VCicW5Fk/9/do5G2UzqgTXrV xVfncv72//rW81f8+yOf/JoGhtarP8c/Bq2954988mv6w9/8Jy33/gEAQPJKWlRJi6Geb5eb LiwuBkqul58v598suibYkjR29ev1w+ef1NH9+1UsFqWzZ/XTh+7WJTe+U5I0u/9H6j+5X48e mtf173mnr+S6v7Ogmy/u00Xre9XX1aFjp87osZ/PauYHz+lsqU9dvQP6D7dvsX3ub/y/f6n+ oVH9/q9fJ0n69o9+pumHf67+oVF1vXKH/W1XDeiaC8u2j6/9u7+8lCD+zm0X2P690Rs/8FH1 l9dpw0VXqad9Ubdf1aeto73qaC/p1Jl5vXT0pP7TnkfUVx5Rz8CQ8XHT7Ll9P9QHf+dF9Q+t 0x999O3Lf9tw0VXqGRii5wMAgBgT7IpKAe5e1z/fNsGuVjVX9++h++6TJL38pjeteqxdzCjB XnSZ0nH5rR/Q3i/8X9KpQ5Kko9//K3X1D6l8/kU69cTfaPalI3rVHR+TqotarJh9whjoKupD N29SpbKg3/+zu/XUMy/qsovH9K9/7S26cmyd/o/Pfk1nT62TtJRgv+F9v6X+8oj6h0YlSX3l ES1Wzr2pG64c0533zOjI/FkNb9yqcm+7rr5gzXL8+Sd/qPO2XinpuhX/7h0oryiX099rXnj6 xzpvy5Vaf+FlevfEZl2+aVC/96d36x8efVIXbxnTHW+8Vsde/qUKxYK6evuNj5tmzz/9Y23Y coV6B4dW/K1vzbDWj11KzwcAADEm2OHvYNvluU53sIfuu08vvvGNy/8+7/77l///2cXFFQm2 U/7seQdbkgqFkq74J/9CP/ry76tUnVehID318D0aWTeqxVMvadON71d7Z4+vu9evu2it+rrb 9YnPfEkPPfRt9ZfX6bGnntXnvjSjf7Pjdr35ms268xs/lvS6VxLbR3XelivUOzj8ygeCyoof Uh5+6WW95bqt+uL9T6hnYK3eftWFOnL8pIYG+15JCB9dfm79v0cvuLQhmbT/e03v4LDWj12m 0Qsu1SWb1kqSHvrm/To5V1W12K7f+9NfqL+8TpVKRf/hjnM/CL33j3ZKkv7nT3xZ/eV16h8a 0Y1bB3TdRUNa09sp69hJffMH+/Wtxw+pZ2BIHV09+o/bVpbh7PyCvvPoz3X3w/vV1b9WXb39 Ro8pSLp+S78mLhpSub9TR46f1v3fe0oPPX5IPYNr1dHVo7ZiQb/6qiFdfeGQOtpKK45ZXVxc VSfVxUUtVios5wgAAGJVLCyqWFgM9XyTO9jPvOENuuCBB5aT6vp/1+Irni+TKSIeP0rsGVyr jRO364XvTOtMpaBSe1GlMy+puuEarT1/i+8fNV6yYenu7sx996u9e1Dnj1+tgaFRvXDmiCTp 2isu0v/zJ39xLrFds1ajY+PacvVNtsf73J136bd/88O651s/UvHMYV170fX6sz1f079479LS gtXqohYXz1VC7d+N5Xb6u138xOmzWtPXrS98+nf13R88ruePLujxX7ys04tt6uju1W995n79 l3+59Anokmtfr/VbLtfF19yiyuK8btjSq7e8eoPuuf8RTd39DW2//Va9+02v0ZmTD+n+R5/W 0Hnnfu36xXu+rs9/5Zv60PvfoXe9+SYdPHhQX/ve0xrecKHRY17/qvP1tmvP1wN//5j+6+e/ ove85SZ94O236NTxb+mhJ/Zr6LwL9KuvPl/XXzyi/3Hfd/XnX/6Gfv2OW/WuN9/kWCde9QQA ABCFSKaIGN7BfvKWW3TJt74lSSuS6ydvuWX1813y5+UE+6XZX3oW8OVf/FTVqnRWXRrrlTo6 OnTy+BGj5zbq7b5CknRwdlbrtqxTZbGo48eOqzK/VNChNQM69MIvlh///fv2rHj+u//tp9U7 uFbSVZKkqS98Sb/xP/1TveuN16vU3q4TJ0/pi1/+6+UE+8zpUzp25Mjy82v/Plf2qxz+Lsf4 H931jD78rtdpqDyoX339a5Yqu1LRH/73r+u7T+5f8UPQubNndfrECR156SXNL0j/eOuEJOlT n/msjh4/pakvzen2N71Gb7zuUv3ZF76i06fPSFp6zB/8f5/SmWq7pvYU9a4336SbrxnXH+7+ ks6cmZP0Gs/HXH/HlUuP+dQf64WDL+vOE8f0gbffojdNXK4/n/5LnT51Rle/8pj/+uk/0ZET ZzS158xygr2yTrzqCQAAIMoEO/wUEbt8ZaThDnbNT26+WVc++OCKf9up2OTPbYWGBLuikmvh jvziJzr74k+0MDCm/vmjmpub09mzZzU/d1jWugs1sN7f2oTHTpxWeaBXvf19KrZ3qdrWpYpK 6usfkCSdOHlKC/PnPhVccOWNGt50iYY3XSJJ6hkYUkXF5fi8SvrvX/4rffjXJ6Wq9Jn/Nq1T Z+vuuKqoxbrH1/7d+L6d/m4X//GzJ/Rr/+5TOq+von80PqY73vYmbd64Qf/0Ha/VvR/9zxrZ fG5KRffgsIY2XaqhTUt/K/d3S5JefPEFrbvgCnWtH5ckrRseknXwefWv23yu7k+c0vmXXq+e 85eS4JG1ZR156UUNHLvQ6DFDAz2SpK9OfXLFezlv3dql1xrZpDV9S+WZPXhI68auXD6OU514 1RMAAEA0CXYEd7Bt8hWnOdjXfvvbK/595YMP6nuvfe3q59vkz22vfBBoO/cg50TpzLFDOvLY N3Sq2qMtN7xbp48c1MuP/IWK1aUE9vAPvqrSzR9SZ++g8Zv9/k9/oVuvv0w3XPdqff+ZE5pb WFRbR4fGNy39kO57P35CKrXXJXQFLaqwnFRXXqnu5crr6Nbd939P//wD71J1cVGfvfMuda87 l/TXnnvs5GkN9Harv39Alaq0UC2qt2vpdayjx1QtFLVYKDnWR+04CyqpvX9YfecV9eLLv9TT D+3T3+x9XH/9uf9bvT3dOvzCz9VdXm/7vKXXOqnhcr/K5SEVO3u1dt3S+oyzh17S3Pyczs6d +3Cwbv0GlTr7lh9z8CVL8/PzmpubM3rMIeu41q8d1DWvv02VjkENbbxYZ08e1ZnjR9Q3skmF jj69fPTEUnmG1q4oj13Znf4GAAAQtSjmYNvlKws2d7BvePjh5f//nZtuWv73td/+tr5z002r EuzG43ZqfmWC7XQncnFhTicf+2upUNC6ifeq0NmvntF+zV11m84+fq+6OjvU3t6u4499TW3X vV8qFI3e7F98c5+uGd+k3/7IDv1vf/B5HTtu6VWXXaT3vu4iLS4u6jP/bVodfedW3OgaHFZ5 02XacMWNtserFoqaK/bq9t/+U7383JNqK29W/7oLGxL0oh74h6f0zltepX+1Y1JfmHlU1cqc 3nrtmCTpK19/QKXOXhU7el3uYBeW79x+fNtV+vrf79eP93fo1LpNetXmpXnlD333Ec3Pz2lu fkEnT59Vb3enNp63XpVFaWGxoEKxqPv+4Um971eu1T977236wn2P6lf+0XmSpLvu/YaK7d0q dPQsv+aO992uL97/2PJjvvK1B1Rs71Kho9voMV958Cf68B036eMf/Q39pz/+C7WpqusmrtW7 3/SP9fFP3aNqqV0PfP8pbbv1mlXlaXzPbn8DAACIWuMUkd/bfp3ncz4+9ciK55vcwX79d76z /P+/ecMNy/9b+/sNDz+8/Pdagu2UB527g121f8DZpx/UcG9Rzw3dqu7hMS1Ul/7et/lqLRyf 1eaul9Te3q5qtaqfP/Vt9Vz8BqPKOjnfpX/5ibv0gTderk/89g6tHRpUsVDQQqWi3/zf/7Me 3f+ihsfOTVN48uGvrHj+r35st7oHR84lfNWCih296hm+QMXOpZVDuvrXrohXqkX9+d/u08GD B/WmG6/Xr737bZIKevHQEf3h5+/RZz5/t/qGL1DHwIhjfdSOs1At6cTps3r/G8b1kXe+Wm1t JR09fkr33vd3+t1Pfk7d5Q1q712rO7/+PX3gV67W337pTyRJb/k3n1XPmlHd9e1ZzZ06oXe8 5fX65++/XYesY/rU1D367PQ31DdygTr6z62X/aEPvkcf+uB7dHZuXnd//UF9+vNfUc/QRrUb Puavvv9LHXn5Xt3xhlfr4Xs/q7n5in6y/wXtue976ugfUam7rC8++DN1FRf1wfe8XR/6tXc5 vme3vwEAAESfYPufIlL/+JIqtvnKgsMc7G+85jWr/v3m735XkjRXra5IsFcd95U52AXLsqo7 p/bq0OLq9ZnnX/iRxks/0yMvFLT26ndKdT/ak6TqYkUdP/trXX/JiCqVio4eO6YfnB5T1/rL PN94dXFRp48d0vGDz+jMsZfU2dGm3f/xQ9qycVQf/Z3f19/+4IDOu+xGVRbmdPSFp3X62GF1 Dwyra2Bpqb3ugWF1Dw7r9NHDsp77qSSpvPFSlTetXLbOevanK+J9Ixt1/OAvdOLwc1qYO622 zqU7xQtnT6mts0d9wxvVP7JZ7V29K45z17++fsW/3/yxKS3MndZiZV6njx5SW0ePpKrmT59Q sa1dPUPnaXD0Qs2dPq4jzz+pU0dmVWrvUnnjJepZM6q2zh4dO/iMThx6VgtnT6lQKKqqqto7 e9Q3sln9I5v15X+39IvVDVe8Vv0jm9W/brOq1UW1d/aqb2SzBkbHdPe/f4PnYwrFok4cfl4n Dj2r+dPHVersVltHl6TCcj2WOrp1bPaAjh98RgtzS+VZOHtap48d1sC6C/TIXb+74v1vvfEO bbjiddpwxWvp+QAAIL4E+6UntHXr1sDP379/vyprV+emF9/5r3RdiHI9IumpD356xd9GipZ2 bZ9wnoNdOfaiLm1/Vo8/d0r9V75XC4W21UculnRsw+t1Yv4JXb51s44fP67FA8/rhyfWq71v 2L1UxZLaB9arv6NPHcdf0pnjL+vjn9yjqV0f1v/57/8XPf6bn9BisUMdg2s1UOxQx7HDkrT8 BcHyPOjBUQ28Mi+7fXBk1ftojBe6BtUzulWl3iGdOXZYC2dPSZI615ynroFhdfaVVejsUeOq hrd+7E5Zzz2hM8cOq2tgWOWNl6nUO6S2YlGLxXYtLsxJVamrd0hd/UPq7F+rQnef2tq71a+S 2vtHNH/2pBYL7VpQSW2d/eoeuVDF7kGdOXZYlfmzamvvWipD/5DU2VP3aaikUne/Otecp1JH 19L61gPDKnT1Gz+me/gCFbsHlt7zmVNSoaCO3kG1969VsWdAhbYO9ay7UMWufp05/pIqc2fU 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 Xvj/AaF0Q2BtEurcAAAAAElFTkSuQmCC --------------090006010904000603030307 Content-Type: text/x-csrc; name="foo.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="foo.c" #include #include #include // x86 instructions : nop, nop, nop, ret unsigned char stack_instructions[] = {0x90, 0x90, 0x90, 0xc3}; RAYENTRY KernelModuleEntry(char *arguments) { KPrintf("Starting stack execution test...\n"); __asm__ __volatile__ ("call *%0\n": : "r"(stack_instructions)); KPrintf ("This shouldnt happen!"); exit(-2); } --------------090006010904000603030307--