summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2016-08-04 16:00:31 +0530
committerRaghavendra G <rgowdapp@redhat.com>2016-08-09 01:15:26 -0700
commit567304eaa24c0715f8f5d8ca5c70ac9e2af3d2c8 (patch)
tree1d0b681cd5a1fb9b77af51173345a92b705ce70a /libglusterfs/src
parent76401324af5a5e7dc3acf8d4fbe4884d6c3f0281 (diff)
downloadglusterfs-567304eaa24c0715f8f5d8ca5c70ac9e2af3d2c8.tar.gz
glusterfs-567304eaa24c0715f8f5d8ca5c70ac9e2af3d2c8.tar.xz
glusterfs-567304eaa24c0715f8f5d8ca5c70ac9e2af3d2c8.zip
inode: Adjust lru_size while retiring entries in lru list
As part of inode_table_destroy(), we first retire entries in the lru list but the lru_size is not adjusted accordingly. This may result in invalid memory reference in inode_table_prune if the lru_size > lru_limit. Change-Id: I29ee3c03b0eaa8a118d06dc0cefba85877daf963 BUG: 1364026 Signed-off-by: Soumya Koduri <skoduri@redhat.com> Reviewed-on: http://review.gluster.org/15087 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Raghavendra G <rgowdapp@redhat.com> Reviewed-by: Prashanth Pai <ppai@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'libglusterfs/src')
-rw-r--r--libglusterfs/src/inode.c9
-rw-r--r--libglusterfs/src/libglusterfs-messages.h10
2 files changed, 18 insertions, 1 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c
index 6e1234e9ce..6e4c2f11bc 100644
--- a/libglusterfs/src/inode.c
+++ b/libglusterfs/src/inode.c
@@ -1511,6 +1511,14 @@ inode_table_prune (inode_table_t *table)
{
while (table->lru_limit
&& table->lru_size > (table->lru_limit)) {
+ if (list_empty (&table->lru)) {
+ gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0,
+ LG_MSG_INVALID_INODE_LIST,
+ "Empty inode lru list found"
+ " but with (%d) lru_size",
+ table->lru_size);
+ break;
+ }
entry = list_entry (table->lru.next, inode_t, list);
@@ -1780,6 +1788,7 @@ inode_table_destroy (inode_table_t *inode_table) {
inode_t, list);
__inode_forget (trav, 0);
__inode_retire (trav);
+ inode_table->lru_size--;
}
while (!list_empty (&inode_table->active)) {
diff --git a/libglusterfs/src/libglusterfs-messages.h b/libglusterfs/src/libglusterfs-messages.h
index d18f4cb311..d2ad44e470 100644
--- a/libglusterfs/src/libglusterfs-messages.h
+++ b/libglusterfs/src/libglusterfs-messages.h
@@ -36,7 +36,7 @@
*/
#define GLFS_LG_BASE GLFS_MSGID_COMP_LIBGLUSTERFS
-#define GLFS_LG_NUM_MESSAGES 206
+#define GLFS_LG_NUM_MESSAGES 207
#define GLFS_LG_MSGID_END (GLFS_LG_BASE + GLFS_LG_NUM_MESSAGES + 1)
/* Messaged with message IDs */
#define glfs_msg_start_lg GLFS_LG_BASE, "Invalid: Start of messages"
@@ -1762,6 +1762,14 @@
* @recommendedaction
*
*/
+#define LG_MSG_INVALID_INODE_LIST (GLFS_LG_BASE + 207)
+
+/*!
+ * @messageid
+ * @diagnosis
+ * @recommendedaction
+ *
+ */
/*------------*/
#define glfs_msg_end_lg GLFS_LG_MSGID_END, "Invalid: End of messages"